[英]Importing Modules from Multiple Parallel Subdirectories (Python)
對於python來說相對較新,我正在使用它進行工作中的實驗室設備自動化。
我的腳本位於目錄B中。目錄B的父目錄為目錄A。目錄A包含另一個目錄,我需要從該目錄輸入和導入模塊。 結構如下:
A
B C
myscript.py
E F
m1.py m2.py
我需要將m1.py和m2.py導入到腳本中。 我無法將我的腳本移到A目錄中,因為它正在訪問我在B中編寫並轉儲的其他模塊。出於公司特定的原因,我需要維護包括C目錄和C目錄以下的所有內容的目錄結構(不要獲取我開始了。)
我的問題是,我該如何智能地導入這些文件? 我不想對它們的路徑進行硬編碼,因為它們將存在於SVN中,並且根目錄可能會更改。 我在考慮使用循環掃描嗎? 我只是不熟悉使之成為可能的語法。 歡迎所有解決方案!
我有以下文件設置:
A
├── B
│ ├── __init__.py
│ └── myscript.py
└── C
├── E
│ ├── __init__.py
│ └── m1.py
├── F
│ ├── __init__.py
│ └── m2.py
└── __init__.py
碼:
A / C / E / m1.py
def my_func1():
print 'func1'
A / C / F / m2.py
def my_func2():
print 'func2'
A / B / myscript.py
from C.E.m1 import my_func1
from C.F.m2 import my_func2
my_func1()
my_func2()
或者,如果您的導入目錄名稱帶有空格(例如, C dir
而不是C
):
import importlib
m1 = importlib.import_module("C dir.E.m1")
m2 = importlib.import_module("C dir.F.m2")
m1.my_func1()
m2.my_func2()
所有__init__.py
文件均為空,但需要存在,因此Python知道在這些文件夾中查找代碼。
cd
到A
目錄,然后以包形式運行腳本。 注意:沒有.py
和文件名的末尾。
$ python -m B.myscript
輸出:
func1
func2
如果目錄結構始終相同,則可以嘗試將m1.py
和m2.py
導入,方法是將C
的路徑附加到myscript.py
sys.path
中。
您還可以使用os.path.dirname
和os.path.join
和os.path.abspath
類的os.path
方法以及變量__file__
從B
相對地獲取C
的路徑。
范例-
import os.path
import sys
curdir = os.path.dirname(__file__)
cdir = os.path.abspath(os.path.join(curdir,'../C'))
sys.path.append(cdir)
import m1,m2
更好的做法是在Python中顯式導入並注意目錄結構。 如果結構發生變化,則您的進口也將發生變化。
只要您的項目位於python路徑上,您就應該能夠從位於B
或層次結構中其他任何位置的模塊執行此操作:
from Project.A.B import myscript
from Project.A.C.E import m1
from Project.A.C.F import m2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.