我正在嘗試使用pip來安裝一個使用python腳本的模塊。這裏是script.py
的內容:爲什麼python的pip安裝在腳本中行爲奇怪,但在python提示符下很好?
#/usr/bin/python2.7
# I'm the file called `script.py`
import sys, importlib, pip
print(sys.version); print(sys.path) # For debugging
try:
importlib.import_module('docopt')
except ImportError:
pip.main(['install', '-U', 'docopt'])
finally:
globals()[pack] = importlib.import_module('docopt')
運行這個腳本,例如,使用python2.7 script.py
給我:
$ python2.7 script.py
2.7.9 (default, Oct 3 2016, 17:42:24)
[GCC 4.3.2 20081105 (Red Hat 4.3.2-7)]
['/usr/lib/python27.zip', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/site-packages']
No module named docopt
Downloading/unpacking docopt
Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement docopt
Cleaning up...
No distributions at all found for docopt
Storing debug log for failure in /root/.pip/pip.log
Traceback (most recent call last):
[...]
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named docopt
所以問題相關互聯網連接/ SSL什麼的運輸。然而,T 他相同的命令完全正常工作在Python交互式解釋,當我手動輸入他們(複製&粘貼它們):
$ python2.7
Python 2.7.9 (default, Oct 3 2016, 17:42:24)
[GCC 4.3.2 20081105 (Red Hat 4.3.2-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pip, sys
>>> print(sys.path)
['/usr/lib/python27.zip', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/site-packages']
>>> pip.main(['install', '-U', 'docopt'])
Downloading/unpacking docopt
Downloading docopt-0.6.2.tar.gz
Running setup.py (path:/tmp/pip_build_root/docopt/setup.py) egg_info for package docopt
Installing collected packages: docopt
Running setup.py install for docopt
Successfully installed docopt
Cleaning up...
0
再次,weirds我出門就是件事,它交互式工作即在shell中運行python2.7
,然後手動輸入相同的代碼。但是,不是當我運行腳本文件與python2.7 script.py
。因此,在一個案例中,在同一臺機器上,同一名口譯員在另一種情況下可以訪問互聯網。
我正在用盡故障排除的想法。我使用相同的機器和用戶來獲得上述結果。沒有python-startup文件,所以不會使這些命令以交互方式神奇地工作。兩種情況下sys.path
的內容都相同。我不是一個代理的背後。任何想法可能會在腳本中丟失什麼?
不,不使用代理。奇怪的是,它在解釋器中起作用,即在shell中運行'python2.7',然後手動輸入相同的代碼。但是,不是當我做'python2.7 script.py'。因此,在一個案例中,在同一臺機器上,同一名口譯員在另一種情況下可以訪問互聯網。 – JCGB
完全盲目猜測:您是否啓用了SELinux? – Guillaume
從來沒有聽說過,所以我猜不是。 '$ sestatus bash:sestatus:找不到命令' – JCGB