簡體   English   中英

從包中的模塊導入Python類

[英]import of Python class from module in package

我的結構看起來像這樣:

project/->
   app.py
   checker/->
      exc.py
      anc.py

我的文件很簡單:

# app.py
from checker.exc import ExampleClass

# checker/exc.py:
from anc import AnotherClass

class ExampleClass(AnotherClass):
    print('Example')

# checker/anc.py:
class AnotherClass:
    print('AAAA')

當我在checker文件夾中運行exc.py時,一切正常,當我使用來自package checker的模塊運行app.py時,一切正常。

但是當我運行使用來自checker.exc的類的app.py時,ex需要anc。 我有一個錯誤ModuleNotFoundError: No module named anc

意識到這是一條膠帶解決方案。

exc.py更改為:

try:
    from anc import AnotherClass
    print('abs import')
except ModuleNotFoundError:
    from .anc import AnotherClass
    print('rel import')

class ExampleClass(AnotherClass):
    print('Example')

這樣,例如,您可以在調試時使用絕對導入,但是在導入時依靠相對導入自行運行app.py

嘗試導入它們的順序應反映預期的使用,首先嘗試使用最可能使用的一種。 如果切換嘗試,則錯誤相同。

由於代碼是從項目文件夾中運行的,因此為了使exc.py找到anc.py您需要將exc.py更改為以下內容:

from .anc import AnotherClass

class ExampleClass(AnotherClass):
    print('Example')

正如berna1111的注釋所暗示的那樣,這可能在直接運行exc.py時引起問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM