我正在构建一个将通过pip包含在其他项目中的库。
我有以下目录('venv'是virtualenv):
project
\- bin
\- run.py
\- myproj
\- __init__.py
\- logger.py
\- venv
我激活了virtualenv。
在bin / run.py中我有:
from myproj.logger import LOG
但我总是得到
ImportError: No module named myproj.logger
以下来自“项目”目录的工作:
python -c "from myproj.logger import LOG"
从'bin'目录调用时,没有正确地将'project'目录添加到pythonpath。如何从bin目录中的脚本导入'myproj'中的模块?
答案 0 :(得分:7)
将myproject
安装到venv
virtualenv;然后,您可以从任何脚本(包括myproject
)导入bin/run.py
,同时在没有sys.path
黑客的情况下激活环境。
要安装,请为myproject
包创建project/setup.py
,并在virtualenv处于活动状态时从project
目录运行:
$ pip install -e .
它将安装myproject
到位(myproject
模块中的更改立即可见,无需重新安装myproject
)。
答案 1 :(得分:5)
最简单的解决方案是将父文件夹作为可搜索路径附加到导入上方。
import sys,os
sys.path.append(os.path.abspath('..'))
from myproj.logger import LOG
答案 2 :(得分:1)
只有当前工作目录在PYTHONPATH中,用于解决依赖关系。因此,如果您在bin中并执行脚本,则项目不再位于路径中。您必须使用一种常用方法将项目添加到PYTHONPATH,方法是附加到环境变量或通过编程方式编辑sys.path列表,如另一个答案中所示。
答案 3 :(得分:0)
在PYTHONPATH中添加项目路径