2016-05-30 111 views
2

我想導入一個模塊,我用python寫出了一個只打印出包含數字的列表。我遇到的問題是我希望能夠從一個單獨的目錄中導入它,但迄今爲止我閱讀的答案似乎不適合我的情況。從目錄中導入用戶定義的模塊在Python中

例如,假設我想從我的文檔文件夾的目錄中我應該導入printnumbers.py實現以下:

import sys 
    sys.path.append('/home/jake/Documents') 
    import printnumbers.py 

的代碼導致該snipit在「導入錯誤」告訴​​我指定的模塊不存在。我不確定從哪裏開始,我已經多次檢查過,以確保它是正確的路徑拼寫以及模塊名稱。我仍然試圖瞭解到什麼附加到「sys.path」。據我所知,它告訴程序在該目錄中搜索模塊?

感謝任何回答我的新手問題的人。我只是在尋找更好的理解,python文檔沒有提供我的思維框架。

回答

7

當文件爲printnumbers.py時,該模塊被稱爲printnumbers(沒有.py)。因此使用

import printnumbers 

import sys 
sys.path.append('/home/jake/Documents') 

追加'/home/jake/Documents'到的sys.path結束。只要導入語句導致Python搜索模塊,就會搜索sys.path中列出的目錄(按所列順序)。 (已導入模塊在sys.modules緩存,所以Python並不總是需要尋找sys.path目錄導入模塊...)

所以,如果你有一個文件/home/jake/Documents/printnumbers.py,然後import printnumbers會導致Python來導入它提供有在sys.path中列出的目錄中沒有其他名稱爲printnumbers.py的文件,其前/home/jake/Documents/

請注意,將目錄注入到sys.path不是設置Python搜索模塊的常用方法。通常最好將/home/jake/Documents添加到您的PYTHONPATH環境變量中。 sys.path將自動包含PYTHONPATH環境變量中列出的目錄。

+0

男孩我覺得自己像一個完整的笨蛋我可以發誓我看到了「.py」擴展名結尾的一個例子,我正在看。剛剛測試過您的解決方案,現在它出色地工作。非常感謝你的幫助。 – Ragecoder

+0

現在有很大的意義。爲什麼添加擴展時導入失敗?我現在有點好奇。這是否意味着我可以有一個沒有導入爲python模塊的文件? – Ragecoder

+0

不,您不能將.txt或.jpg導入爲python模塊。後臺Python將確定當前目錄中的模塊名稱是否爲.py,並相應地導入它。試圖導入其他任何東西都會引發導入錯誤。 – TheLazyScripter

1

還有一兩件事,用一個空__初始化__.py文件在你的目錄 ,使其作爲一個Python包(只有Python會知道這 目錄以外的Python包目錄一個普通的 目錄)。因此,您可以從 不同的目錄中導入該軟件包中的模塊。

相關問題