32

.pycにある別のフォルダーの場所にファイルを保存する Python を持つことは可能sys.pathですか?

/code
    foo.py
    foo.pyc
    bar.py
    bar.pyc

に:

/code
   foo.py
   bar.py
/code_compiled
   foo.pyc
   bar.pyc

より整理されていると思うので、これが欲しいです。あなたが私に与えることができるどんな助けにも感謝します.

4

10 に答える 10

20

アップデート:

Python 3.8では-X pycache_prefix=PATH、コマンドラインオプションを使用する.pycと、コードツリーではなく、指定されたディレクトリをルートとする並列ツリーにファイルを書き込むことができます。$PYTHONPYCACHEPREFIXenvvarクレジットを参照してください: @RobertT'の回答

キャッシュの場所はで報告されますsys.pycache_prefix([Python 3.2以降]サブディレクトリNoneのデフォルトの場所を示します)。__pycache__

コンパイルされたPythonバイトコードのキャッシュをオフにするように設定すると、Pythonはソースモジュールのインポート時にファイル-Bを書き込もうとしません。envvarクレジット.pycを参照してください:@Maleevの回答$PYTHONDONTWRITEBYTECODE


古い[Python2]の答え:

PEP 304:バイトコードファイルの生成の制御があります。そのステータスはWithdrawnであり、対応するパッチは拒否されました。したがって、それを直接行う方法はないかもしれません。

ソースコードが必要ない場合は、*.pyファイルを削除するだけです。*.pycファイルはそのまま使用することも、卵に詰めて使用することもできます。

于 2009-01-23T05:26:17.913 に答える
4

バイトコード生成を完全に犠牲にしたい場合は、コマンド ライン フラグがあります。

python -B file_that_imports_others.py

IDE のビルド/実行設定に入れることができます

于 2010-06-06T21:19:39.167 に答える
3

コードを卵として配布することは、コードを整理しておくための優れた方法です。必要なすべてのコードとメタデータを含む単一のファイルよりも整理されたものはありません。バイトコード コンパイラの動作方法を変更しても、混乱が生じるだけです。

これらの pyc ファイルの場所が気に入らない場合は、代わりに読み取り専用フォルダーから実行することもできます。Python は書き込みができないため、pyc ファイルは作成されません。あなたが受ける打撃は、変更したかどうかに関係なく、すべての python ファイルがロードされるとすぐに再コンパイルする必要があることです。つまり、起動時間が大幅に短縮されます。

于 2009-01-23T13:23:25.050 に答える
3

同意しません。理由が間違っているか、少なくとも十分に定式化されていません。しかし、方向は有効です。コンパイル済みオブジェクトからソース コードを分離できるのには十分な理由があります。ここにそれらのいくつかがあります(すべて、私はある時点で遭遇しました):

  • 組み込みデバイスは ROM から読み取りますが、RAM 上のメモリ内ファイルシステムを使用できます。
  • マルチ OS 開発環境とは、作業ディレクトリを (samba/nfs/whatever と) 共有し、複数のプラットフォームでビルドすることを意味します。
  • 営利企業は、IP を保護するために pyc のみを配布したいと考えています
  • 同じ作業ディレクトリを使用して、複数のバージョンの Python のテスト スイートを簡単に実行する
  • より簡単に移行ファイルをクリーンアップします ( rm -rf $OBJECT_DIR ではなく、 find . -name '*.pyc' -exec rm -f {} \;)

これらすべての問題には回避策がありますが、ほとんどは解決策ではなく回避策です。これらのほとんどの場合の適切な解決策は、ソフトウェアがこれらの移行ファイルを保存および検索するための別の場所を受け入れることです。

于 2010-01-10T04:49:45.223 に答える
1

バイトコードをマジック ディレクトリに構築できるようにする継続的な pep があります。

基本的に、すべての python ファイルは directory にコンパイルされます__pythoncache__

于 2012-08-07T15:40:23.427 に答える
-2

「もっと整理された方がいい気がする」 なぜ?どのように?何を達成しようとしていますか?

コンパイラ出力を保存するポイントは、モジュールがインポートされるときの読み込み時間を少し節約することです。なぜこれをより複雑にするのですか?.pyc が気に入らない場合は、「すべての .pyc を削除する」スクリプトを定期的に実行してください。

それらは必須ではありません。彼らは役に立ちます。なぜそのヘルプをオフにするのですか?

これは、結果のオブジェクトが不可欠な C、C++、または Java ではありません。これは、Python がたまたま使用する単なるキャッシュです。誤ってチェックインしてしまうことがないように、Subversion ではそれらを「無視」としてマークします。

于 2009-01-23T11:20:21.163 に答える