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

标签 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 而不是我的虚拟环境。

预先感谢您的帮助。

最佳答案

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

在虚拟环境中你可以使用:

$(env) /usr/bin/env python

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

#!/var/www/bin/python

希望对您有所帮助。

关于python - 在虚拟环境中,当我从文件导入包时 sys.path 是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35035598/

相关文章:

python - 如何将整数转换为base58?

python - 打开 .csv 文件编辑一个字段,写回 .csv 文件

Python-尝试乘以列表中的项目

python - 如何修复谷歌云控制台中的 "ModuleNotFoundError: No module named ' _lzma'“问题

python - 使用 python 列表的 html 文档中的表

python - 在python中随机选择图像内的200x200正方形

python - 为什么 sys.stdout.write() 显示字符串的长度?

python - 隐藏一些可能没有成员的 Pylint 错误

python - jupyter 不使用 pyenv 设置的版本

python - 无法在 MacOS 上使用 pyenv Python 安装 tkinter