2011-07-13 39 views
3

目前我有一個「主」文件夾,我寫的所有模塊最終都會去,但我通常將我目前正在使用的模塊放在'dev'文件夾中,所以我不會雜亂的東西還沒有準備好的另一個文件夾。從當前文件相對導入

的結構看起來像這樣

 
MyProg 
|-run.py 
|-\lib 
| |-someLibrary.py 
| ... 
| 
|-\main 
| |-readyScripts.py 
| ... 
| 
|-\dev 
    |-inProgress.py 

Run.py將從主文件夾導入腳本。

主文件夾中的腳本使用相對導入從lib文件夾中導入someLibrary,它工作正常。

但是,當我仍然在dev文件夾中編寫我的程序並直接從那裏運行它(例如:python inProgress.py)時,它不起作用,說我「試圖在非包中嘗試相對導入」

有沒有辦法能夠從lib文件夾中導入模塊,而我正在開發dev中的腳本?

編輯:這是我的inProgress.py import語句:

 
from .lib import someLibrary 

理想情況下,我想保持下去,這樣,當我將它移動到主文件夾,我不會有對導入語句做任何事情。

回答

2

如果你有你的PYTHONPATH設置爲MYPROG,你所能做的就是每個文件夾中創建一個空__init__.py文件,以便蟒蛇它們識別爲模塊:

MyProg 
|-run.py 
|-__init__.py 
|-\lib 
| |-someLibrary.py 
| |-__init__.py 
| ... 
| 
|-\main 
| |-readyScripts.py 
| |-__init__.py 
| ... 
| 
|-\dev 
| |-inProgress.py 
| |-__init__.py 

因此,在你inProgress.py文件,你可以使用方法:

import lib.someLibrary 

在你run.py你可以這樣做:

0

將您的PYTHONPATH設置爲上一級,然後使用軟件包語法運行它?

+0

我不確定「使用包語法運行它」是什麼意思。 – MxyL

1

一種選擇是通過使用它們的路徑導入:

import imp 

foo = imp.load_source('module.name', '/path/to/file.py') 
foo.MyClass() 
相關問題