2017-10-05 42 views
0

我正在嘗試使用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的內容都相同。我不是一個代理的背後。任何想法可能會在腳本中丟失什麼?

回答

0

無法獲取指數的基礎URL https://pypi.python.org/simple/

表明,由於某種原因,你的Python解釋器不能訪問互聯網。這可能有很多原因。你使用HTTP代理嗎?

+0

不,不使用代理。奇怪的是,它在解釋器中起作用,即在shell中運行'python2.7',然後手動輸入相同的代碼。但是,不是當我做'python2.7 script.py'。因此,在一個案例中,在同一臺機器上,同一名口譯員在另一種情況下可以訪問互聯網。 – JCGB

+0

完全盲目猜測:您是否啓用了SELinux? – Guillaume

+0

從來沒有聽說過,所以我猜不是。 '$ sestatus bash:sestatus:找不到命令' – JCGB