Pycharm: 虚拟更改包名

Pycharm: virtually change name of package

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

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

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

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

现在为了测试,我将测试中的导入从 import mypkg.module1 更改为 import module1,运行 中的测试 pycharm,修复错误,将其改回并犯罪。但正如您所想象的那样,这很容易出错且令人讨厌。

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

我只使用 python 3.5+(如果重要的话)。

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

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

与其在安装过程中创建 mypkg 目录,不如在 src 目录中创建一个真正的 mypkg 目录:

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

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

2。解决方法:符号链接

在 PYTHONPATH 的某处创建一个 mypkg 目录。然后创建指向 module1module2 的符号链接。 (How to create symlinks on Windows, How to create symlinks on Linux)

在您的项目目录中:

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

您的 PYTHONPATH 中的某处:

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