【发布时间】:2018-01-06 18:13:36
【问题描述】:
(在用重复的问题投票给我打分之前,请注意,我在这个问题上能找到的所有内容都与 virtualenv 有关,而不是 venv)
系统:
- Ubuntu 服务器 16.04
- Python 3.6 已安装,Python 3.5 本机
背景 (人为的例子,所以可能有一两个错字,但想法是重要的部分)
我有一个项目,形式如下:
Project/
├── __init__.py
└── project
├── packageA
│ ├── fileA.py
│ └── __init__.py
└── packageB
├── fileB.py
└── __init__.py
在fileb.py中,我有一个导入语句,例如
import project.packageA.fileA
我通过以下方式创建了一个 venv;
cd /path/to/Project; python3.6 -m venv .venv; source .venv/bin/activate
然后我跑
source project/packageB/fileB.py
这会给我一个错误:
ModuleNotFoundError: no module named 'project'
尝试解决:
- 将“项目”的路径和“项目”的路径添加到 $PATH
- 在 .venv/bin/activate 脚本中修改 $PYTHONPATH,使 sys.path 现在指向“Project”和“project”
- 完整阅读文档here
- 已验证 os.sys.path 显示项目和项目路径
问题:必须可以使用 venv 进行模块导入,否则它的值将为零 - 那么我在设置中根本缺少什么? (对于virtualenv,我只使用了'add2virtualenv')
[编辑 - 显示更多细节]
# Changes to .venv/bin/activate
PYTHONPATH="/home/steve/Temp/Project:/home/steve/Temp/Project/project:$PYTHONPATH"
export PYTHONPATH
python -c "import os; print(os.sys.path)"
['', '/home/steve/Temp/Project', '/home/steve/Temp/Project/project', .....
[Edit2 - 将 packageA 添加到 PYTHONPATH Works]
如果我将 'path/to/packageA' 添加到我的 PYTHONPATH 中,则导入工作。要使用它,我必须将每个子包添加到我的项目中——对于大型项目来说不太理想。
【问题讨论】:
标签: python python-3.x python-venv