簡體   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