2009-03-04 60 views
14

可能重複:
Way to have compiled python files in a separate folder?編譯後的字節碼文件(.pyc)能否在不同的目錄下生成?

當Python模塊編譯成字節碼,它從你的.py文件產生pyc文件。

我的問題是,是否有可能將這些.pyc文件寫入與模塊所在的目錄不同的目錄?

例如,我有一個大的模塊目錄。我不想讓它堆滿.pyc文件,我想將我的源代碼保存在目錄中,並有一個子目錄,比如存儲所有.pyc的「字節碼」。

這可能嗎?

+0

如果沒有與Python本身,那麼你可以編寫一個shell腳本,通過find,xargs和move來完成。 – 2009-03-04 19:11:02

回答

14

這在 「Way to have compiled python files in a seperate folder?

被應答

簡短回答: - 除非您運行的是Python 3.2或更高版本 - 請參閱here

澄清:3.2之前,您可以編譯字節碼,並把它在其他地方按布賴恩河邦迪的建議,但除非你確實從那裏運行它(而不是從文件夾中您想保留​​原始)Python會仍然輸出.py文件所在的字節碼。

+0

更好的回答:它只能在3.2或更高版本上運行。之前沒有。這個問題是重複的;請按照上面的鏈接。 – 2013-05-10 06:32:27

0

我似乎記得在某處讀到這是不可能的,而且Python人有理由不讓它成爲可能,儘管我不記得在哪裏。

編輯:對不起,我誤解了這個問題 - 我的意思是說,不可能(我認爲)配置Python可執行文件以將其字節碼文件默認放在不同的目錄中。你可以隨時編寫一個小的Python編譯器腳本(或找到一個,我確定他們在那裏),將字節碼文件放在你選擇的位置。

7

檢查py_compile module,特別是:

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

的CFile的是你感興趣的參數

從上面的鏈接:

...的字節 - 代碼被寫入cfile, ,默認爲文件+'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

我增加了兩個版本的代碼,雖然我相信它的功能等同於`rm * .pyc`:編譯的文件可以被移動;所以呢? – tzot 2009-03-04 22:18:53

2

在情況下,「亂扔垃圾」確實是你的問題,你可以隨時收拾.py.pyc和/或.pyo文件的.zip文件,並將其添加到您的sys.path

3

我一直在尋找這個答案,而且找不到太多。但是你可以前綴的文件夾名稱,以新編譯的文件名(需要確保文件夾存在第一)

下面是一些代碼爲我的作品:

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) 
相關問題