Pycharm: 虚拟更改包名
Pycharm: virtually change name of package
我有一个 python 项目,源代码树如下:
|-src
| |- module1
| | |- tests
| |- module2
| | |- tests
|- ...
它将作为包 mypkg
部署到 docker,以我无法更改的方式——透明地添加 mypkg
文件夹和 __init__.py
。
在我的代码中,我通常使用 import mypkg.module1
或 from 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
的目录,其中包含 module1
和 module2
。我可以想到两种方法来解决这个问题:
1。正确解决方案:修复项目结构和安装
与其在安装过程中创建 mypkg
目录,不如在 src
目录中创建一个真正的 mypkg
目录:
|-src
| |- mypkg
| | |- module1
| | | |- tests
| | |- module2
| | | |- tests
|- ...
(旁注:您的测试可能不应该在您的包中。您不想运送那些,或者让用户导入它们,是吗?)
2。解决方法:符号链接
在 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
我有一个 python 项目,源代码树如下:
|-src
| |- module1
| | |- tests
| |- module2
| | |- tests
|- ...
它将作为包 mypkg
部署到 docker,以我无法更改的方式——透明地添加 mypkg
文件夹和 __init__.py
。
在我的代码中,我通常使用 import mypkg.module1
或 from 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
的目录,其中包含 module1
和 module2
。我可以想到两种方法来解决这个问题:
1。正确解决方案:修复项目结构和安装
与其在安装过程中创建 mypkg
目录,不如在 src
目录中创建一个真正的 mypkg
目录:
|-src
| |- mypkg
| | |- module1
| | | |- tests
| | |- module2
| | | |- tests
|- ...
(旁注:您的测试可能不应该在您的包中。您不想运送那些,或者让用户导入它们,是吗?)
2。解决方法:符号链接
在 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