2011-07-23 73 views
7

我開發了python應用程序,我決定把它變成由easy_installpip以後安裝的包。我用搜索找到了幾個有關python包的目錄結構的好資源。請參見this answerthis postPython包中的腳本

我創建的結構如下(我省略了幾個文件列表,使謝靈運更清晰)

 
Project/ 
|-- bin/ 
|-- my_package/ 
| |-- test/ 
| | |-- __init__.py 
| | |-- test_server.py 
| |-- __init__.py 
| |-- server.py 
| |-- util.py 
|-- doc/ 
| |-- index.rst 
|-- README.txt 
|-- LICENSE.txt 
|-- setup.py   

在此之後,我創建可執行腳本server-run

 
#!/usr/bin/env python 
from my_package import server 

server.main() 

我放入bin目錄。如果我使用python setup.py install或通過pip/easy_install安裝我的軟件包,一切正常,我可以運行server-run,我的服務器開始處理傳入的請求。

但我的問題是如何測試server-run在開發環境中工作(沒有事先安裝my_package)?另外我想使用這個腳本爲開發目的運行最新的服務器代碼。

發展發生在Project目錄中,以便我得到ImportError,如果我跑./bin/server-run

 
[email protected]:~/dev/Project/$ ./bin/server-run 
Traceback (most recent call last): 
    File "./bin/server-run", line 2, in 
    import my_package 
ImportError: No module named my_package 

是否有可能修改bin/server-run腳本,所以,如果我從另一個文件夾中的文件系統中的某個地方運行它(不一定是它的工作從Project dir)?另請注意,我想使用(如果可以實現)相同的腳本在生產環境中運行服務器。

回答

3

您需要相對導入。嘗試

from .. import mypackage 

from ..mypackage import server 

的文檔是在這裏

http://docs.python.org/tutorial/modules.html#intra-package-references

這些作品上的Python 2.5或更高版本。

要做到這一點只有在開發版本,請嘗試:

try: 
    from my_package import server 
except ImportError: 
    from ..my_package import server 
+0

但是,如果我用這個代碼'服務器run'不會安裝程序包後工作。 – Alik

+0

更新了先試用正常版本的方法。 – agf

+0

呵呵。我忘了ImportException :)謝謝! – Alik

4

可以使用virtualenv測試Python代碼而開發,如果它被釋放

2

最簡單的方法是配置權Python路徑,所以Python知道在當前目錄中查找my_package

在Linux(使用bash):

export PYTHONPATH=. 
bin/server-run 

在Windows上:

set PYTHONPATH=. 
python bin/server-run