16

可能重复:
如何在单独的文件夹中编译 python 文件?

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

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

例如,我有一个很大的模块目录。我不想让它到处都是 .pyc 文件,我想将我的源代码保留在目录中,并有一个像“字节码”这样的子目录,所有 .pyc 都存储在其中。

这可能吗?

4

6 回答 6

15

这在“如何在单独的文件夹中编译 python 文件? ”中回答了这个问题。

简短的回答:——除非你运行的是 Python 3.2 或更高版本——见这里

澄清一下:在 3.2 之前,您可以按照 Brian R. Bondy 的建议编译字节码并将其放在其他地方,但除非您实际上从那里运行它(而不是从您想要保持原始状态的文件夹中)Python 仍将输出字节码,其中 . py 文件是。

于 2009-03-04T19:10:29.630 回答
7

检查py_compile 模块,特别是:

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

cfile 是您感兴趣的参数。

从上面的链接:

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

于 2009-03-04T19:09:30.490 回答
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)
于 2012-04-24T12:05:07.067 回答
2

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

于 2009-03-04T19:46:22.867 回答
0

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

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

于 2009-03-04T19:08:36.327 回答
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

)

于 2009-03-04T19:09:56.213 回答