3

仅当我从另一个文件导入包时,sys.path 才会更改。

在我的 pyenv 中:

$(env) python
>>> import sys
>>> print(sys.path)
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/var/www/lib/python3.4/site-packages']

在 fileImport.py (在我的虚拟环境中):

# fileImport.py
import sys
print(sys.path)

命令 :

$(env) python fileImport.py

给了我同样的好结果!

但是当我尝试从 anotherfile.py 导入 fileImport 包时,如下所示:

#!/usr/bin/env python    
# anotherfile.py    
import fileImport

sys.path 结果更改:

$(env) python anotherfile.py
['/var/www', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

我像这样安装pyenv:

$ sudo apt-get install python3.4-venv python3-dev
$ pyvenv-3.4 env

我不明白为什么从文件导入使用来自我的系统而不是来自我的虚拟环境的 sys.path。

预先感谢您的帮助。

4

1 回答 1

1

我通过改变shebang解决了这个问题。

在虚拟环境中,您可以使用:

$(env) /usr/bin/env python

但在文件中,shebang 必须指向虚拟 python 的确切位置。就我而言:

#!/var/www/bin/python

我希望它会有所帮助。

于 2016-01-27T13:40:03.960 回答