2009-03-04 9 views
14

可能性の重複:
Way to have compiled python files in a separate folder?コンパイルされたバイトコードファイル(.pyc)を別のディレクトリに生成できますか?

Pythonはバイトコードにモジュールをコンパイルするとき、それはあなたの.pyファイルから.pycファイルのファイルを生成します。

私の質問は、これらの.pycファイルを、モジュールが置かれているディレクトリとは異なるディレクトリに書き込むことができますか?

たとえば、モジュールの大きなディレクトリがあります。 .pycファイルを散らばっているのではなく、ソースコードをディレクトリに保存し、.pycがすべて格納されている「バイトコード」のようなサブディレクトリを持っていたいと思います。

これは可能ですか?

+0

は、 find、xargs、moveを使ってこれを行うシェルスクリプトを書いてください。 –

答えて

14

これは "Way to have compiled python files in a seperate folder?"

に答えています

短い答え:いいえ - Python 3.2以降を実行している場合を除き - hereを参照してください。明確にするために

:3.2前に、バイトコードをコンパイルすることができますし、ブライアンR.ボンディの提案ごとに別の場所に置いていますが、実際にはそこから(とないあなたが自然のまま維持したいフォルダから)それを実行しない限り、Pythonのだろう.pyファイルがあるところではまだバイトコードを出力します。

+0

もっと良い答え:それは3.2以上で動作します。これまでにない。この質問は重複しています。上記のリンクに従ってください。 –

0

私はどこでもこのことは不可能であり、Python Peopleはそれを可能にしない理由があることを覚えているようですが、どこで覚えていないのでしょうか。

EDIT:申し訳ありませんが、私は質問を読み違える - 私が意味することは、デフォルトでは別のディレクトリにそのバイトコードファイルを置くために実行可能なPythonのを設定するには、(私が思う)ことはできませんということです。バイトコードファイルをあなたが選んだ場所に置く小さなPythonコンパイラスクリプトを書くことができます(あるいは、そこにいると確信しています)。

7

チェックpy_compile module、特に:

py_compile.compile(file[, cfile[, dfile[, doraise]]]) 

CFILEはあなたが興味のあるパラメータがある

上記のリンクから:。

...バイト・コードはcfileに書き込まれ、 はデフォルトでfile + 'c'になります。

0

スクリプトを作成してコンパイルしてから移動することができます。何かのように:

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 

へ)

+0

私はあなたのコードの2つのバージョンを追加しましたが、その機能は 'rm * .pyc'と同等です:コンパイルされたファイルは移動できます。だから何? – tzot

2

場合は「ポイ捨て」確かにあなたの問題はあるが、あなたは常に.zipファイルに.py.pycおよび/または.pyoファイルをパックすることができますし、あなたのsys.pathに追加します。

3

私はこれに対する答えを探していましたが、あまり見つけられませんでした。しかし、あなたはちょうどここに私の作品にいくつかのコードです(フォルダが最初に存在することを確認する必要があります)新しくコンパイルしたファイル名に

をフォルダ名の前に付けることができます:python自体で、あなたは可能性がない場合は

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)