私は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か何かの輸送関連の問題を。繰り返しますが、私をweirds事はそれこと、である
$ 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
:しかし、tを彼と同じコマンドが、私は手で入力してPythonの対話インタプリタ、(コピー&が貼り付け)に完全に正常に動作します対話的に働くつまりシェルでpython2.7
を実行してから、同じコードを手で入力します。ただし、のスクリプトファイルをpython2.7 script.py
と実行しているときは表示されません。したがって、あるマシンでは、同じインタプリタがインターネットにアクセスできます。
トラブルシューティングのアイディアが不足しています。私は上記の結果を得るために同じマシンとユーザーを使用しました。 Pythonスタートアップファイルがないので、コマンドを魔法のように対話的に動作させるわけではありません。どちらの場合もsys.path
の内容は同じです。私はプロキシの背後にいるわけではありません。スクリプトに欠けている可能性のあるアイデアはありますか?
いいえ、プロキシを使用していません。変わったことは、インタプリタから、つまりシェルで 'python2.7'を実行して、手で同じコードを入力することです。しかし、私が 'python2.7 script.py'をしたときではありません。したがって、あるマシンでは、同じインタプリタがインターネットにアクセスできます。 – JCGB
完全に盲目的な推測:あなたはSELinuxを有効にしていますか? – Guillaume
それを聞いたことがないので、私は推測しません。 '$ sestatus bash:sestatus:command not found' – JCGB