繁体   English   中英

绝对导入在 Python 3.7 中不起作用

[英]Absolute import doesn't work in Python 3.7

我有一个这样设置的目录

Project
   |
   |folder1
   |  |folder2
   |  |  |Script_A.py
   |
   |folder3
   |  |Script_B.py

我试图访问在Python 3.7一个名为ClassB类从Script_A.py居住在Script_B.py。 我正在尝试使用绝对导入来实现这一点。 下面是 Script_A.py 的内容:

from folder3.Script_B import ClassB

似乎有什么我想念的。 我不明白Script_A应该如何知道Script_B甚至文件夹folder3甚至Project 的存在 什么告诉python查找这些文件夹?

我已经阅读了PEP328 ,但这并没有回答我的任何问题。

我会使用__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

更好的主意

使用 PYTHONPATH 运行脚本

PYTHONPATH="$PWD/path_to_package"  python code.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM