我有一个python项目,源代码如下:
|-src
| |- module1
| | |- tests
| |- module2
| | |- tests
|- ...
它将作为包mypkg
部署到docker,以一种我无法改变的方式 - 透明地添加mypkg
文件夹和__init__.py
。
在我的代码中我通常用import mypkg.module1
或from mypkg.module2 import xyz
导入东西。但是,由于mypkg
下没有__init__.py
文件夹(和src
),pycharm无法识别这些导入并报告Unresolved reference
错误,并且无法对任何测试运行pytest(即使它们不依赖于仅在泊坞窗)。
现在进行测试我将测试中的导入从import mypkg.module1
更改为import module1
,在pycharm中运行测试,修复错误,将其更改回来并提交。但是你可以想象这很容易出错并且很烦人。
有什么方法可以告诉pycharm或python环境(也许$PYTHONPATH
将我的包识别为mypkg
并采取相应的行动?
我只使用python 3.5+(如果这很重要)。
为了让python和IDE正确解析导入,您需要创建一个名为mypkg
的目录,其中包含module1
和module2
。我可以想到两种方法:
而不是在安装过程中创建mypkg
目录,在mypkg
目录中有一个真正的src
目录:
|-src
| |- mypkg
| | |- module1
| | | |- tests
| | |- module2
| | | |- tests
|- ...
(旁注:您的测试可能不应该在您的软件包中。您不想发送它们,或者让用户导入它们,对吗?)
在PYTHONPATH的某处创建一个mypkg
目录。然后创建符号链接到module1
和module2
。 (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