2011-10-28 46 views
1

我編寫我的第一個項目在Python中,我不確定如何處理導入。我正在學校的電腦上工作,無法修改PYTHONPATH變量。我也在從各種計算機/操作系統開始研究這個項目(所以項目的路徑並不總是相同的)。PYTHONPATH無法修改時導入Python中的其他模塊的最佳方法?

我在不同的文件夾中有許多不同的模塊,它們都可以導入彼此。目前,我使用file_path = os.path.abspath(__file__)從另一個模塊獲取一個模塊的路徑,然後通過目錄回溯,然後在文件夾中添加所需的模塊。然後將其添加到sys.path.append(symantic_root)的PYTHONPATH中。

該系統的工作原理,但它結束了看起來很凌亂,有很多重複的代碼在每個模塊開始,例如:

import os 
import sys 
# Get the path to the directory above the directory this file is in, for any system 
file_path = os.path.abspath(__file__) 
root_path = os.path.dirname(os.path.dirname(file_path)) 
# Get the paths to the directories the required modules are in 
symantic_root = os.path.join(root_path, "semantic_analysis") 
parser_root = os.path.join(root_path, "parser") 
# Add the directories to the path variable 
sys.path.append(symantic_root) 
sys.path.append(parser_root) 
import semantic_analyser 
import jaml 

上更好的方式來構建一個項目中的任何意見如這將非常感激。

回答

1

首先,創建一個簡單的main.py腳本,爲應用程序提供單一入口點。例如:

if __name__ == '__main__': 

    import sys 
    from package import app 

    sys.exit(app.run()) 

接下來,創建一個頂級包,組在一起的所有模塊,並在同一目錄作爲main.py爲它提供接入點。然後,您應該能夠消除所有路徑操作代碼,並且只需從應用程序中的任何模塊使用完全指定的導入語句(如from package.module import function)即可。

+0

感謝您的回覆。當你說「提供接入點」時,我只是徘徊你的意思。這是否與__init__.py文件有關? –

+0

@Alty。在你的問題中,你沒有說清楚你的模塊目前在什麼程度上可以重新構建文件夾,我不確定你使用的是什麼操作系統 - 所以「訪問點」只是一個普通的目錄,或者是一個符號鏈接等。關鍵是要找到一種方法,將所有模塊組合在一個包中 - 然後事情變得更加簡單(希望我不只是在這裏說明明顯)。 – ekhumoro

0

你沒有提到你正在使用的操作系統。這個答案大部分都是以Linux(或類Unix)環境爲前提的。如果你在Windows上,其他人將不得不打開。

從你的例子中不清楚你爲什麼要經歷所有這些扭曲。首先,你怎麼無法修改PYTHONPATH?這只是一個shell環境變量。如果您可以登錄並運行Python,那麼您顯然擁有必要的權限來設置您自己的環境變量。

但我甚至不確定這是必要的。如果你簡單地將所有的自定義模塊安裝到您自己的圖書館目錄,並安裝.pth文件由vinilios的建議,你可能只是做這樣的事情:

import site 
import os 

site.addsitedir(os.path.expanduser('~/lib/python')) 

你也可能想看看進入virtualenv軟件包,該軟件包允許您創建自己的Python環境,您可以在其中安裝自己的軟件包。當您需要安裝系統Python中不可用的模塊時,它非常方便。