我使用许多共享命名空间的python包(setuptools支持它)。这些与使用setuptools的python 2.7配合得很好。我的问题是关于IntelliJ的PyCharm插件:它不能完全识别包的文件和成员。
假设我有很多套餐:
第一个包裹:
cantrips
+--- types
| +--- ...
+--- patterns
| +--- ...
+--- (more subpackages here)
+--- entropy.py
+--- (more *.py files here)
第二个包裹:
cantrips
+--- watch
+--- ...
如果我尝试导入cantrips.watch
或cantrips.entropy
内的任何内容,我完全没有问题(这在Python27中完美运行)。 但是 IntelliJ IDEA 13中的Pycharm插件似乎无法通过代码检查找到cantrips.entropy
。
问:如何才能正确地使IntelliJ / PyCharm了解命名空间的每个部分?
答案 0 :(得分:1)
包是否在单独的项目中?
我认为我遇到了同样的问题并且已经向JetBrains提交了支持票。
如果在第二个包中你可以导入cantrips.entropy但是在代码正文中如果代码检查不能解决cantrips.entropy,例如:
import cantrips.entropty
def my_func():
cantrips.entropy.do_stuff()
...
IDE抱怨" entropy"在my_func中没有通过突出显示为黄色来解决。
一些解决方法是使用alais:
import cantrips.entropty as cantrips_entropty
def my_func():
cantrips_entropy.do_stuff()
...
或者使用"来自导入"语法:
from cantrips.entropty import do_stuff
def my_func():
do_stuff()
...
希望这有帮助
答案 1 :(得分:0)
我正在使用PyCharm 2019.1,并且找到了一种方法(它可能有解决方法)
使用名称空间软件包的诀窍是,一个软件包分布在多个目录中,一旦您了解了这一事实,就很容易了。
通常使用PyCharm,将内容根目录或项目根目录设置为您在(普通包的默认值)中打开项目的目录,因为它不需要名称空间包。这会混淆PyCharm,因为它会为解释器设置相应的结构以设置PYTHONPATH。
要对命名空间包进行更正,只需将所有具有命名空间文件夹的目录添加到内容根目录。
File -> Settings -> Project Structure -> Add Content Root
因此,如果您的结构为
rootdir/
+--dist_package1/
+--namespace/
+--file1.py
+--dist_package2/
+--namespace/
+--file2.py
将“内容根目录”设置为rootdir
,而不是将其设置为包含namespace
的所有目录,例如dist_package1
和dist_package2
。
删除设置为rootdir
的原始内容根。
这应该将未解析的引用修复为名称空间包
更新(07/25/2019):
您可以用鼠标右键单击dist_package1
和dist_package2
并选择
Mark Directory As -> Sources Root
这应该解决您的进口问题