如何在包

时间:2016-05-24 09:14:02

标签: python pycharm python-3.4

我正在编写一个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的警告。虽然我有两个问题:

  1. 我无法通过ctrl +单击C2的父类来访问C1的类定义(通常我只需按住md1.C1可以在编辑器中跳转到module1.py
  2. 所有这些让我想到,如果我的包裹建筑方法(__init__.py,在包装内交叉引用等)可能存在一些缺陷。)
  3. 虽然这两个似乎是不同的问题,但我认为他们可能有一个共同的解决方案。

0 个答案:

没有答案