簡體   English   中英

從調用其他模塊的python文件導入模塊

[英]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。

兩種解決方案。

  1. 您可以在inside.py中使用sys.path.append添加目錄folA作為嘗試導入模塊時要查找的位置。 我不知道這是一種好的做法。

  2. 就您而言,您可以只在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.

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