[英]Importing a module from a python file calling other modules
我正在嘗試運行特定的代碼,現在它需要導入以下 Python 文件,但出現錯誤,我構建了一個玩具示例來說明問題。 我在 Python 3.6.3 版上運行。
考慮以下文件夾結構。
root
|- outside.py
|- folA
|- __init__.py
|- inside.py
|- folB
|- __init__.py
|- eveninside.py
現在這些文件的內容如下。
外面.py
import folA.inside
print("Outside")
里面.py
import folB.eveninside
print("Inside")
Eveninside.py
print("Even Inside") #All inits are empty
現在,當我運行inside.py 時,事情運行得非常好並且有預期的輸出。 但是當我運行outside.py 時出現錯誤提示“沒有名為folB 的模塊”。 我嘗試附加系統路徑,但沒有任何更改。 請向我解釋如何解決這個問題。
這只是來自python從python路徑查找模塊的事實。 在這里,當您在外部啟動時,他嘗試查看您的目錄中outside.py是否存在folB。
兩種解決方案。
您可以在inside.py中使用sys.path.append
添加目錄folA作為嘗試導入模塊時要查找的位置。 我不知道這是一種好的做法。
就您而言,您可以只在inside.py`import folA.folB.eveninside中編寫。 但是顯然,當您啟動inside.py時,它將無法工作。 在這種情況下,您有第一個解決方案。
如果只希望從outside.py運行該程序,則可以將此代碼添加到outside.py中的includes中:
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '.')))
並使用以下代碼將context.py添加到包結構的每個級別:
import os
import sys
path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(0, path)
_ = ''
然后,您可以將其導入代碼中,以使其了解程序包的結構。 即inside.py將具有from .context import _
免責聲明:此代碼來自其他人,但我不確定是誰。 可能是這篇文章 。 我確信存在更好的做法,但是我發現它可以工作,並且context.py是將常量保持在中央位置的好地方。 只需導入它們而不是下划線
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.