Pycharm:几乎改变了包的名称

问题描述 投票:1回答:1

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

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

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

在我的代码中我通常用import mypkg.module1from 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 pycharm python-import pythonpath
1个回答
1
投票

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

1. The correct solution: Fixing the project structure and installation

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

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

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

2. The workaround: Symlinks

在PYTHONPATH的某处创建一个mypkg目录。然后创建符号链接到module1module2。 (How to create symlinks on WindowsHow 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
© www.soinside.com 2019 - 2024. All rights reserved.