我正在编写一个python包,遇到一个问题,即使用pyCharm在子包中交叉引用。
包结构如下所示:
mainpackage/
|
+- __init__.py
|
+- subpackage/
|
+- __init__.py
|
+- module1.py
|
+- module2.py
与
subpackage/__init__.py:
from module1 import C1
from module2 import C2
print(dir())
module1.py:
class C1(object):
pass
module2.py:
import module1 as md1
class C2(md1.C1):
pass
现在,pyCharm给了我一个未解决的参考资料'找不到__init__.py
和'模块中的错误' module2.py
出错。尽管如此,我可以运行__init__.py
而不会出现解释器抛出的任何错误,并打印出['C1', 'C2', '__bultins__', ...]
。
对pyCharm有用(在pyCharm中没有错误)是:
subpackage/__init__.py:
from .module1 import C1
from .module2 import C2
print(dir())
module1.py:
class C1(object):
pass
module2.py:
import subpackage.module1 as md1
class C2(md1.C1):
pass
运行__init__.py
时出现错误:' SystemError:父模块''未加载,无法执行相对导入'。在另一个脚本中尝试import mainpackage.subpackage
时也会发生这种情况。另外我了解到在程序包本身中使用package / subpackage名称(就像我在module2.py
中所做的那样)是错误的。
如果它起作用的话,我不应该关心pyCharm的警告。虽然我有两个问题:
md1.C1
可以在编辑器中跳转到module1.py
__init__.py
,在包装内交叉引用等)可能存在一些缺陷。)虽然这两个似乎是不同的问题,但我认为他们可能有一个共同的解决方案。