簡體   English   中英

從父目錄的子目錄導入python模塊

[英]Import a python module from a subdirectory of a parent directory

我有這樣的目錄結構

dir1/subdir1/module1.py
dir1/subdir2/subdir22/module2.py

假設我將__init__.py添加到每個目錄和子目錄中。 我想從模塊2導入module1,在參考相關問題並嘗試其他方式后,找不到解決方案。 例如

在module2中,我嘗試導入模塊1

from .... import subdir1.module1
from ....subdir1 import module1

上面的兩個導入都引發語法錯誤。

這對我有用:

$ mkdir -p dir1/subdir1
$ mkdir -p dir1/subdir2/subdir22
$ touch dir1/{,subdir1,subdir2,subdir2/subdir22}/__init__.py
$ echo 'x = 42' > dir1/subdir1/module1.py
$ echo 'from ...subdir1.module1 import x; print x' > dir1/subdir2/subdir22/module2.py
$ python -m dir1.subdir2.subdir22.module2
42

魔咒是

from ...subdir1.module1 import x

雖然

from ...subdir1 import module1

也可以。

下面的代碼可以從路徑加載一個模塊,即使不是一個包裝內或沒有默認的路徑上(這里模塊Contemplate我的一個引擎),你應該有一個虛擬__init__.py該文件夾中的文件,但:

import imp
ContemplateModulePath = os.path.join(os.path.dirname(__file__), '../src/python/')
try:
    ContemplateFp, ContemplatePath, ContemplateDesc  = imp.find_module('Contemplate', [ContemplateModulePath])
    Contemplate = getattr( imp.load_module('Contemplate', ContemplateFp, ContemplatePath, ContemplateDesc), 'Contemplate' )
except ImportError as exc:
    Contemplate = None
    sys.stderr.write("Error: failed to import module ({})".format(exc))
finally:
    if ContemplateFp: ContemplateFp.close()

if not Contemplate:
    print ('Could not load the Contemplate Engine Module')
    sys.exit(1)
else:    
    print ('Contemplate Engine Module loaded succesfully')

這對我有用

import sys
from os import path
sys.path.append( path.dirname( path.dirname( path.dirname(path.dirname(path.abspath(__file__))) ) ) )

from dir1.subdir1 import module1

暫無
暫無

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

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