我有一个这样的目录
Project
|
|folder1
| |folder2
| | |Script_A.py
|
|folder3
| |Script_B.py
我正在尝试从Python 3.7中的 Script_A.py 访问位于 Script_B.py 中的名为 ClassB 的类。我正在尝试使用绝对导入来实现这一点。这是Script_A.py的内容:
from folder3.Script_B import ClassB
似乎有些我想念的东西。我不知道 Script_A 应该如何知道 Script_B 甚至文件夹 folder3 甚至的存在。项目。是什么告诉python查找这些文件夹?
我已经读过PEP328,但这并不能回答我的任何问题。
答案 0 :(得分:2)
我将使用__init__.py
(只是一个空文件)将文件夹转换为模块:
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
subpackage2_1/
__init___.py
deep_module.py
module_test.py
这将允许(在module_test.py
中)
from package.subpackage2.subpackage2_1 import deep_module
如果deep_module具有Foo类
# deep_module.py
class Foo: pass
我们可以将Foo导入为
from package.subpackage2.subpackage2_1.deep_module import Foo
我不建议您使用此类导入,因为它们很难调试。
您可以这样做:
from package.subpackage2.subpackage2_1 import deep_module
# it helps to know where class is coming from
foo = deep_module.Foo()
比直接导入Foo更好,但是出于可读性考虑,我仍然会尽量避免使用它;)
如果在软件包目录中进行呼叫,则
from subpackage2.subpackage2_1 import deep_module
或者,这将随处可见
# terrible hack is to add your package to your sys path
import sys
sys.path.insert(0,'path_to_package')
from package.subpackage2.subpackage2_1 import deep_module