Python がモジュールをバイトコードにコンパイルすると、.py ファイルから .pyc ファイルが生成されます。
私の質問は、これらの .pyc ファイルを、モジュールが存在する場所とは別のディレクトリに書き込むことは可能ですか?
たとえば、モジュールの大きなディレクトリがあります。.pyc ファイルをばらまくのではなく、ソース コードをディレクトリに保持し、すべての .pyc が格納される「bytecode」のようなサブディレクトリを作成したいと考えています。
これは可能ですか?
Python がモジュールをバイトコードにコンパイルすると、.py ファイルから .pyc ファイルが生成されます。
私の質問は、これらの .pyc ファイルを、モジュールが存在する場所とは別のディレクトリに書き込むことは可能ですか?
たとえば、モジュールの大きなディレクトリがあります。.pyc ファイルをばらまくのではなく、ソース コードをディレクトリに保持し、すべての .pyc が格納される「bytecode」のようなサブディレクトリを作成したいと考えています。
これは可能ですか?
これは、「別のフォルダーに python ファイルをコンパイルする方法はありますか?」で回答されています。
簡単な答え:いいえ。Python 3.2 以降を実行している場合を除きます。こちらを参照してください。
明確にするために:3.2より前は、 Brian R. Bondyの提案に従って、バイトコードをコンパイルして別の場所に置くことができますが、実際にそこから実行しない限り(元の状態に保ちたいフォルダーからではなく)、Pythonは引き続きバイトコードを出力します. py ファイルは .
py_compile モジュールを確認してください。特に:
py_compile.compile(file[, cfile[, dfile[, doraise]]])
cfile は、関心のあるパラメーターです。
上記のリンクから:
...バイトコードは cfile に書き込まれます。デフォルトは file + 'c' です...
私はこれに対する答えを自分で探していましたが、あまり見つけることができませんでした。ただし、フォルダー名を新しくコンパイルされたファイル名にプレフィックスとして付けることができます (最初にフォルダーが存在することを確認する必要があります)。
ここに私のために働くいくつかのコードがあります:
import py_compile
import os
import glob
import shutil
path = ''
for infile in glob.glob( os.path.join(path, '*.py') ):
print "current file is: " + infile
strDestination = 'compiled/' + infile + 'c'
py_compile.compile(infile,strDestination)
「ポイ捨て」が実際に問題である場合は、いつでも.zipファイルに、またはファイルをパックして.py
、に追加することができます。.pyc
.pyo
sys.path
これは不可能であり、Python の人々にはそれを可能にしない理由があることをどこかで読んだことを覚えているようですが、場所は思い出せません。
編集:申し訳ありませんが、質問を読み違えました-つまり、デフォルトでバイトコードファイルを別のディレクトリに配置するようにPython実行可能ファイルを構成することはできない(と思います)ということです。選択した場所にバイトコード ファイルを配置する小さな Python コンパイラ スクリプトをいつでも作成できます (または、スクリプトを見つけてください。きっとそこにあるはずです)。
それらをコンパイルして移動するスクリプトを作成できます。何かのようなもの:
for i in `ls *.pyc`
do
mv $i $DEST_DIR
done
(次のように短縮できます。
for i in *.pyc
do
mv $i $DEST_DIR
done
または、驚くべきことに、
mv *.pyc $DEST_DIR
)