首页 > 解决方案 > Pycharm:虚拟更改包的名称

问题描述

我有一个 python 项目,其源代码树如下:

|-src
|  |- module1
|  |  |- tests
|  |- module2
|  |  |- tests
|- ...

它将作为包部署到 docker mypkg,以我无法更改的方式 - 透明地添加mypkg文件夹和__init__.py.

在我的代码中,我通常使用import mypkg.module1or导入东西from mypkg.module2 import xyz。但是,由于 下没有mypkg文件夹(和__init__.pysrc,pycharm 无法识别这些导入并报告Unresolved reference错误,并且无法针对任何测试运行 pytest(即使它们不依赖于仅在 docker 中可用的任何资源)。

现在对于测试,我将测试中的导入从 更改import mypkg.module1import module1,在 pycharm 中运行测试,修复错误,将其改回并提交。但正如您可以想象的那样,这很容易出错并且很烦人。

有什么办法可以告诉 pycharm 或 python 环境(也许$PYTHONPATH可以识别我的包mypkg并采取相应的行动?

我正在使用python 3.5+,专门(如果重要的话)。

标签: pythonpycharmpython-importpythonpath

解决方案


为了让 python您的 IDE 正确解析您的导入,您需要创建一个名为的目录mypkg,其中包含module1module2. 我可以想到两种方法来解决这个问题:

1.正确的解决方案:修复项目结构和安装

不要mypkg在安装过程中创建目录,而是mypkg在您的目录中有一个真实的src目录:

|-src
|  |- mypkg
|  |  |- module1
|  |  |  |- tests
|  |  |- module2
|  |  |  |- tests
|- ...

(旁注:您的测试可能不应该您的包中。您不想运送这些,或者让用户导入它们,对吗?)

2. 解决方法:符号链接

mypkg在 PYTHONPATH 的某处创建一个目录。然后创建指向module1和的符号链接module2。(如何在 Windows 上创建符号链接如何在 Linux 上创建符号链接

在您的项目目录中:

|-src
|  |- module1
|  |  |- tests
|  |- module2
|  |  |- tests
|- ...

在你的 PYTHONPATH 的某个地方:

|- mypkg
|  |- module1 -> path_to_your_project/src/module1
|  |- module2 -> path_to_your_project/src/module2

推荐阅读