无法从同一项目的bin目录导入模块

时间:2013-05-29 14:11:59

标签: python python-import

我正在构建一个将通过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'中的模块?

4 个答案:

答案 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中添加项目路径