4

我正在构建一个库,该库将通过 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”目录调用时,它没有正确地将“项目”目录添加到 pythonpath。如何从我的 bin 目录中的脚本中的“myproj”导入模块?

4

4 回答 4

9

安装myprojectvenv虚拟环境中;那么您将能够在环境被激活时myproject从任何脚本(包括)导入而无需hack。bin/run.pysys.path

要安装,请project/setup.pymyproject包创建并project在 virtualenv 处于活动状态时从目录运行:

$ pip install -e .

它将myproject就地安装(myproject模块中的更改立即可见,无需重新安装myproject)。

于 2013-05-29T14:30:50.413 回答
5

这里的解决方案是获取您拥有的 virtualenv,然后在开发人员模式下安装包。

源 venv/bin/激活

点安装-e。

然后,您可以myproject.loggerrun.py.

您还需要创建一个 setup.py 文件才能将包安装到您的环境中。如果您还没有,可以在这里阅读官方文档。

于 2013-05-29T14:14:21.257 回答
1

只有当前工作目录位于 PYTHONPATH 中,用于解析依赖项。因此,如果您在 bin 内并执行脚本,则项目不再位于路径中。您必须使用一种常用方法将项目添加到 PYTHONPATH,方法是附加到环境变量或以编程方式编辑 sys.path 列表,如另一个答案所示。

于 2013-05-29T14:16:17.290 回答
0

在 PYTHONPATH 中添加项目的路径

于 2013-05-29T14:32:27.993 回答