在虚拟环境中,当我从文件导入包时,sys.path是错误的

时间:2016-01-27 11:07:00

标签: python python-3.4 pyenv

只有从其他文件导入包时,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而不是虚拟环境。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

WebApplicationInitializer

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

$(env) /usr/bin/env python

我希望它会有所帮助。