【发布时间】:2017-01-04 13:37:29
【问题描述】:
对不起,如果这个问题已经使用我不知道要搜索的术语得到回答。
我有一个项目:
project1/
class1.py
class2.py
class2 从class1 导入一些东西,但每个都有自己的if __name__ == '__main__',它们使用我经常运行的各自的类。但是,我有第二个项目,它从project1 创建每个类的子类。所以我希望project1成为一个包,这样我就可以很好地将它导入project2:
project2/
project1/
__init__.py
class1.py
class2.py
subclass1.py
subclass2.py
但是,我在导入时遇到了问题。如果我将project1 制作成一个包,然后在class2.py 内部,我想使用from project1.class1 import class1 导入class1.py 代码。这使project2 代码正确运行。但是现在当我尝试使用project1 不是作为一个包,而是直接从该目录中运行代码时,project1 代码失败(因为它不知道project1 是什么)。如果我将project1 设置为直接在该目录中工作(即class2 中的导入是from class1 import Class1),那么当尝试将project1 用作来自project2 的包时,此导入会失败。
有没有办法同时使用它(使用project1 作为一个包而不是作为一个包)?如果有办法,这是一种不鼓励的方式,我还是应该重组我的代码?关于我应该如何处理的其他建议?谢谢!
编辑
澄清一下,问题出现是因为subclass2 导入了class2,而class2 又导入了class1。根据class2 导入class1 的方式,导入将从project2 或project1 失败,因为一个人将project1 视为一个包,而另一个人将其视为工作目录。
编辑 2
我正在使用 Python 3.5。显然这适用于 Python 2,但不适用于我当前版本的 python。
【问题讨论】:
-
不确定我是否遗漏了您请求的细微差别,但您应该能够使用
from project1 import class1将 project1 类导入 project2,然后通过 class1.function() 使用代码。每个文件中都有if __name__ == "__main__"应该没关系...然后将class1导入class2仍然是from class1 import function。 -
@chrxr:当我尝试在
project2中导入class2时出现问题。由于class2导入class1,然后取决于我如何执行导入在class2 内,从project2的角度来看,导入将失败(如果将其导入为from class1 import Class1)或@ 987654360@'s(如果我将其导入为from project1.class1 import class1)。这是因为有一个进口链。subclass2进口class2进口class1. -
当你想运行一个子模块时,你应该使用
-m开关。 IE。而不是做python /path/to/my/package1/class1.py你应该做python -m package1.class1(显然你的package1包应该在PYTHONPATH或者你应该在父目录中)。顺便说一句:我只是避免你正在做的事情:清楚地分开类定义和脚本并且从不运行package1。编写一个 单独的 文件,从package1导入类并执行它必须做的事情......它更简单、更干净、更不容易出错。
标签: python python-3.x package python-import