簡體   English   中英

將模塊從子文件夾導入到父文件夾

[英]Import module from child folder to parent

所以我查看了這里提出的各種類似問題,但到目前為止沒有任何對我有用。

我有以下文件架構:

\folder
    __init__.py
    supClass.py
    script1.py
    \sub
        __init__.py
        script2.py

所以在 script2.py 中我嘗試導入 supClass。 如果我很好地理解了我在相關主題上閱讀的內容,我必須指定\\folder是 PYTHONPATH 的一部分。

因此,我閱讀了以下示例,最終得到了這段代碼:

if __name__ == '__main__' and __package__ is None:
    from os import sys, path
    sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))

from test_package import supClass

    a = supClass()
    a.print_sup()

但我收到以下錯誤:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
    execfile(filename, namespace)
  File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)
  File "C:/Donnees/Programmes_Python/Developpement/Tests/test_package/sub/script.py", line 18, in <module>
    from test_package import supClass
ImportError: No module named test_package

我檢查了 \\folder 現在是 PYTHONPATH 的一部分

import sys
print sys.path

在我的控制台中,沒關系。 但是, __package__變量保持設置為 None。

我得到的錯誤似乎是說我的\\folder不是一個模塊。 我不明白為什么,也許我在“包”和“模塊”之間混淆了。

無論如何,如果有人有想法,將不勝感激!

\\folder父級應該在PYTHONPATH 然后你可以做

from folder import subClass 

from folder.sub import script2

folderfolder應該在PYTHONPATH (而不是folder本身)的原因是因為folder是你的包, import folder Python 需要查看包含folder的目錄。

請注意,從子文件夾執行腳本是有問題的,但如果您編寫 setup.py 文件則很容易。 有關更多信息,請參閱我在此處的回答 stackoverflow.com/a/41201868/75103。

您是否嘗試僅導入 supClass?

import supClass

或者試試這個:

sys.path.append("../")
import supClass

我試圖重現你的層次結構,這是訣竅:

if __name__ == '__main__':
   from os import sys, path
   sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))

   from supClass import supClass
   a = supClass()
   a.print_sup()

暫無
暫無

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

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