2016-10-08 12 views
0

自分のプロジェクトで明確なファイル構造を使用できるようにするには、次のコードスニペットを使用してプロジェクトのメインフォルダをPYTHONPATHに動的に追加します。ファイルの場所。動的にPYTHONPATHを更新すると.pycの更新が防止される

import sys 
import os 
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), ".")) 

メインファイルを起動すると、.pycファイルを手動で削除するまで、モジュールの変更は認識されなくなりました。したがって、私はこれが何らかの理由でpycファイルが最新であるかどうかをpythonがチェックできないようにします。この問題を何とか克服できますか?

答えて

1

pythonで* .pycファイルを書き込まないようにすることができます。大規模なプロジェクトの場合

How to avoid .pyc files?

これは、パフォーマンスの観点から少しは問題でしょう。気にしないで、pycファイルを作成することはできません。

+0

経由でパッケージの一部としてそれを呼び出すべきではありません。私はなぜこれが起こっているのか理解したいと思いますが。 – weidler

+0

'sys.modules'にはインタプリタによってロードされたモジュールが含まれています。 PYTHONPATHを変更していて、いくつかの新しいモジュールが既に存在していたものを上書きする場合、おそらく新しい変更は見られません。とにかくこのような魔法を使うべきではありません。 PYTHONPATHを可能な限りファイル階層内で高く設定するだけで済みます。また、virtualenvを使用してプロジェクトと他の依存関係をインストールする必要があります。また、複雑な作業を行うためのsetup.pyエントリポイントも必要です。あなたは、シンプリスクリプトから成長し、それをリファクタリングしていないプロジェクトがありますか? –

1

すでにインポートされたモジュールのパスを追加すると、モジュール名がもはや一意でなくなった場合に問題が発生する可能性があります。 import fooを実行して、親パッケージbarsys.pathに追加することを検討してください。import bar.fooも可能になりました。 Pythonは両方を異なるモジュールとみなし、モジュールのアイデンティティに依存するものを混乱させる可能性があります。

最初にこのハッキングを行う必要がある理由を本当に考慮する必要があります。あなたは、パッケージ内部に配置された実行可能ファイルを持っている場合は、

cd bardir/bar 
python foo 

を行う代わりに、任意のよりエレガントな解決策がイマイチならば、私はこれをしようとします

cd bardir 
python -m bar.foo 
関連する問題