2011-07-23 6 views
7

私はeasy_installまたはpipでインストールするパッケージにすることを決めたpythonアプリケーションを開発します。私は検索を使用して、Pythonパッケージのディレクトリ構造に関するいくつかの良いソースを見つけました。this answerまたはthis postを参照してください。Pythonパッケージのスクリプト

私は私が中に置かserver-run

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

server.main() 

実行可能なスクリプトを作成し、以下の構造(私はstrctureがより明確にするために、リスト内の複数のファイルを省略しました)その後

 
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   

を作成binディレクトリ。 python setup.py installでパッケージをインストールしたり、pip/easy_installで正常に動作した場合は、server-runを実行して、サーバーが着信要求を処理し始めます。

しかし、私の質問は、開発環境でserver-run作品(my_packageの事前インストールせずに)ということをテストする方法ですか?また、私はこの目的のために最新のサーバーコードを実行するためにこのスクリプトを使用したいと思います。

開発Projectディレクトリに起こる私は./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 

を実行した場合ので、私はImportErrorを取得しています私は(必ずしもどこかにファイルシステム内の別のフォルダからそれを実行した場合、それが動作するようbin/server-runスクリプトを変更することが可能ですProjectから)?また、本番環境でサーバーを実行するために同じスクリプトを使用したい(可能ならば)ようにします。

答えて

3

相対的なインポートが必要です。ドキュメントはここ

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

はPython 2.5以降でこれらの作品である

from .. import mypackage 

または

from ..mypackage import server 

を試してみてください。 、唯一の開発版でそれを行う試してみ

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

しかし、私はこのコードを使用している場合、 'サーバーrun'は、パッケージのインストール後に動作しません。 – Alik

+0

通常のバージョンを最初に試す方法で更新されました。 – agf

+0

Huh。私はImportExceptionについて忘れてしまった:)ありがとう! – Alik

4

それは

2

をリリースされたかのようにあなたが最も簡単な方法は、権利を設定することです開発の間、テストのPythonコードのvirtualenvを使用することができますPythonパスであるので、Pythonは現在のディレクトリでmy_packageを探すことを知っています。 (バッシュを使って)Linuxの

:Windowsでは

export PYTHONPATH=. 
bin/server-run 

set PYTHONPATH=. 
python bin/server-run 
関連する問題