2010-09-04 82 views
8

我是Python新手,主要使用自己的代碼。但是現在我下載了一個我需要解決的問題。Python:使用下載的模塊

結構示例:

root\ 
    externals\ 
     __init__.py 
     cowfactory\ 
      __init__.py 
      cow.py 
      milk.py 

    kittens.py 

現在cowfactory的__init__.py確實from cowfactory import cow。這會導致導入錯誤。

我可以修復它,改變import語句from externals.cowfactory import cow但直覺告訴我,有一個簡單的方法,因爲它不是很實用。

的其他修復可能是把cowfactory包在我的項目的根,但要麼不是很整齊。

我想我必須做的__init__.py文件中的外部目錄的東西,但我不知道是什麼。

回答

6

的cowfactory包的內部,相對導入應from . import cow使用這樣。外部文件中的__init__.py文件不是必需的。假設你的項目位於ROOT \和cowfactory是你下載到的外部包,你可以做兩種不同的方式:

  1. 安裝外部模塊

    外部Python包通常會用一個文件「 setup.py「,它允許你安裝它。在Windows上,它將是「setup.py bdist_wininst」命令,並且您在「dist」目錄中獲得EXE安裝程序(如果它構建正確)。使用該安裝程序,該軟件包將安裝在Python安裝目錄中。之後,你可以簡單地做一個import cowfactory,就像你的import os一樣。

    如果你有點子或easy_install的安裝:許多外部包可以與他們進行安裝(PIP甚至可以輕鬆卸載)。

  2. 使用PYTHONPATH發展

    如果你想保留所有的依賴一起在你的項目目錄,然後將所有外部包中的外部\文件夾和文件夾添加到PYTHONPATH。如果您使用命令行,你可以像

    set PYTHONPATH=%PYTHONPATH%:externals 
    yourprogram.py 
    

    創建一個包含一些批處理文件,我實際上做了類似的事情,但使用的PyDev + Eclipse的。在那裏,您可以更改「運行配置」以將值「外部」包含在環境變量PYTHONPATH中。環境變量設置完成後,您可以在自己的模塊中簡單地使用import cowfactory。注意這比from external import cowfactory更好,因爲在後一種情況下,一旦你安裝了你的項目(或者你必須將所有的外部依賴作爲一個名爲「external」的包來安裝,這是一個壞主意),它將不再起作用。

同樣的解決方案當然也適用於Linux,但也有不同的命令。

+0

謝謝,在GAE我需要在項目中包含外部庫。你的回答清除了我在其他GAE項目/例子中看到的一些事情。 – Pickels 2010-09-04 08:06:29

1

通常,你會用easy_install我們pip在適當的目錄來安裝它。在Windows上有一個site-packages目錄,如果因爲某些原因無法使用easy_install,則可以放置該軟件包。在Ubuntu上,它是/usr/lib/pythonX.Y/dist-packages。谷歌爲您的特定系統。或者你可以把它放在你的PYTHONPATH環境變量的任何地方。

作爲一般規則,而不是將第三方庫放在程序目錄結構中(雖然對於源代碼管理有不同的意見)。這使您的目錄結構儘可能簡約。

+0

aha我看到了,但使用Google App Engine包含第三部分庫,您必須將它們包含在項目目錄中。 – Pickels 2010-09-04 07:59:42

+0

@Pickels,你應該編輯你的問題,說清楚你是在GAE上。 – aaronasterling 2010-09-04 08:06:36

+0

我想過,但現在我知道如何使用GAE的外部包,因爲我得到的信息讓我非常滿意。 – Pickels 2010-09-04 08:10:42

0

最簡單的方法是使用環境變量$ PYTHONPATH。你運行你的腳本如下之前設置:

export $PYTHONPATH=$PYTHONPATH:/root/externals/ 

,只要你想,你可以添加多個文件夾(提供他們分開由)和Python會看在所有這些文件夾導入時。