可以在不同的目录中生成编译的字节码文件(.pyc)吗?

时间:2009-03-04 19:01:40

标签: python bytecode

  

可能重复:
  Way to have compiled python files in a separate folder?

当python将模块编译为字节码时,它会从.py文件生成.pyc文件。

我的问题是,是否可以将这些.pyc文件写入与模块所在位置不同的目录?

例如,我有一个大型模块目录。我希望将源代码保存在目录中,并且有一个像“bytecode”这样的子目录,其中存储了所有.pyc文件,而不是使用.pyc文件。

这可能吗?

6 个答案:

答案 0 :(得分:14)

Way to have compiled python files in a seperate folder?

回答了这个问题

简短回答: - 除非您运行的是Python 3.2或更高版本 - 请参阅here

澄清:在3.2之前,你可以编译字节码并按照Brian R. Bondy的建议把它放在别处,但除非你真的从那里运行它(而不是你要保留的文件夹) pristine)Python仍会输出.py文件所在的字节码。

答案 1 :(得分:7)

检查py_compile module,特别是:

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

cfile是您感兴趣的参数。

从上面的链接:

  

...字节码写入cfile,   默认为文件+'c'...

答案 2 :(得分: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)

答案 3 :(得分:2)

如果“乱扔垃圾”确实是您的问题,您可以随时将.py.pyc和/或.pyo文件打包到.zip文件中并将其附加到{{{ 1}}。

答案 4 :(得分:0)

我似乎记得在某处读到这是不可能的,并且Python人有理由不能使它成为可能,尽管我不记得在哪里。

编辑:对不起,我误解了这个问题 - 我的意思是,我认为配置Python可执行文件以将其字节码文件默认放在不同的目录中是不可能的(我认为)。你总是可以编写一个小的Python编译器脚本(或者找一个,我确定它们就在那里),它们会把字节码文件放在你选择的位置。

答案 5 :(得分: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