有很多关于如何导入relative packages或explicit location的python问题(链接到两个流行的例子)。
此外,始终有documentation
读完这篇文章之后,我仍然不太清楚什么是规格,它们与模块有什么关系,以及为什么需要对它进行标记化。
所以对于那些不理解的人,你能不能试着解释一下如何做到这一点(以编程方式和引擎盖下的方法)
e.g。
如果我有
proj-dir
--mod1
--|--__init__.py
--|--class1.py
--mod2
--|--__init__.py
--|--class2.py
如何将mod2导入mod1?
import sys
sys.path.insert(0, "../mod2")
这在技术上有效,但我担心如果我试图挑选物品并在其他地方使用它们,它可能在未来引起问题......
import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
所以在这种情况下我只是这样做:
import importlib.util
spec = importlib.util.spec_from_file_location("mod2.class2", "../mod2/class2.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
...
答案 0 :(得分:1)
首先,让我澄清 Python模块和&一个 Python包,以便我们俩都在同一页面上。 ✌
import aModuleName
# Here 'aModuleName' is just a regular .py file.
__init__.py
文件。 ✔ from aPackageName import aModuleName
# Here 'aPackageName` is a folder with a `__init__.py` file
# and 'aModuleName', which is just a regular .py file.
因此, proj-dir 的正确版本会是这样的,⤵
proj-dir
--|--__init__.py
--package1
--|--__init__.py
--|--module1.py
--package2
--|--__init__.py
--|--module2.py
请注意,我还在 proj-dir 本身添加了一个空的
__init__.py
,这也使它成为一个包。
现在,如果要将 package2 的 module2 中的任何python对象导入 package1 的 module1 ,然后 module1.py 文件中的导入语句将
from proj-dir.package2.module2 import object2
# if you were to import the entire module2 then,
from proj-dir.package2 import module2