12

私は、以降にインストールされるパッケージに変換することにしたPythonアプリケーションを開発していeasy_installますpip。検索を使用して、Python パッケージのディレクトリ構造に関するいくつかの優れた情報源を見つけました。この回答またはこの投稿を参照してください。

次の構造を作成しました(構造をより明確にするために、リスト内のいくつかのファイルを省略しました)

計画/
|-- ビン/
|-- my_package/
| | |-- テスト/
| | | | |-- __init__.py
| | | | |-- test_server.py
| | |-- __init__.py
| | |-- サーバー.py
| | |-- ユーティリティ.py
|-- doc/
| | |-- index.rst
|-- README.txt
|-- LICENSE.txt
|-- setup.py           

その後、実行スクリプトを作成しましたserver-run

#!/usr/bin/env パイソン
my_package インポート サーバーから

サーバー.main()

binディレクトリに配置しました。パッケージをインストールした場合、python setup.py installまたはpip/easy_installすべてが正常に機能する場合、実行できserver-run、サーバーが着信要求の処理を開始します。

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

開発はProjectディレクトリで行われるため、ImportError実行すると取得されます./bin/server-run

user@host:~/dev/Project/$ ./bin/server-run
トレースバック (最新の呼び出しが最後):
  ファイル「./bin/server-run」の 2 行目
    my_package をインポート
ImportError: my_package という名前のモジュールがありません

スクリプトを変更bin/server-runして、ファイルシステムのどこかにある別のフォルダーから (必ずしもディレクトリからではなくProject) 実行した場合に機能するようにすることはできますか? また、実稼働環境でサーバーを実行するために同じスクリプトを使用したい (可能であれば) ことにも注意してください。

4

4 に答える 4

4

virtualenv開発中の Python コードを、リリースされたかのようにテストするために使用できます。

于 2011-07-23T08:34:14.617 に答える
4

相対インポートが必要です。試す

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
于 2011-07-23T07:45:16.220 に答える
3

最も簡単な方法は、正しい Python パスを構成することです。これにより、Pythonmy_packageは現在のディレクトリで検索することを認識します。

Linux の場合 (Bash を使用):

export PYTHONPATH=.
bin/server-run

Windows の場合:

set PYTHONPATH=.
python bin/server-run
于 2011-08-08T15:21:56.070 に答える