可能重复:
如何在单独的文件夹中编译 python 文件?
当 python 将模块编译为字节码时,它会从你的 .py 文件生成 .pyc 文件。
我的问题是,是否可以将这些 .pyc 文件写入与模块所在的目录不同的目录?
例如,我有一个很大的模块目录。我不想让它到处都是 .pyc 文件,我想将我的源代码保留在目录中,并有一个像“字节码”这样的子目录,所有 .pyc 都存储在其中。
这可能吗?
可能重复:
如何在单独的文件夹中编译 python 文件?
当 python 将模块编译为字节码时,它会从你的 .py 文件生成 .pyc 文件。
我的问题是,是否可以将这些 .pyc 文件写入与模块所在的目录不同的目录?
例如,我有一个很大的模块目录。我不想让它到处都是 .pyc 文件,我想将我的源代码保留在目录中,并有一个像“字节码”这样的子目录,所有 .pyc 都存储在其中。
这可能吗?
这在“如何在单独的文件夹中编译 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
附加到您的 .zip 文件中sys.path
。
我似乎记得在某处读到这是不可能的,Python People 有理由不让它成为可能,尽管我不记得在哪里。
编辑:对不起,我误读了这个问题——我的意思是(我认为)不可能将 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
)