Могут ли скомпилированные файлы байт-кода (.pyc) генерироваться в разных каталогах?
Возможный дубликат:
Способ скомпилировать файлы python в отдельной папке?
Когда python компилирует модули в байт-код, он создает .pyc файлы из ваших .py файлов.
Мой вопрос: возможно ли, чтобы эти .pyc файлы записывались в другой каталог, кроме того, где находится этот модуль?
Например, у меня есть большой каталог модулей. Вместо того, чтобы засорять файлы .pyc, я хотел бы сохранить исходный код в каталоге и иметь подкаталог типа "байт-код", где хранятся все .pyc.
Возможно ли это?
Ответы
Ответ 1
На это отвечает Способ скомпилировать файлы python в отдельной папке?
Короткий ответ: Нет - если вы не используете Python 3.2 или новее - см. здесь.
Чтобы уточнить: до 3.2 вы можете скомпилировать байт-код и поместить его в другое место в соответствии с предложением Брайана Р. Бонди, но если вы его не запустили (а не из папки, которую хотите сохранить в чистом виде), Python по-прежнему будет выводить байт-код где находятся файлы .py.
Ответ 2
Проверьте модуль py_compile и, в частности:
py_compile.compile(file[, cfile[, dfile[, doraise]]])
Cfile - это параметр, который вас интересует.
Из приведенной выше ссылки:
... Байт-код записывается в cfile, который по умолчанию имеет файл + 'c'...
Ответ 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)
Ответ 4
В случае, если "мусор" действительно является вашей проблемой, вы всегда можете упаковать файлы .py
, .pyc
и/или .pyo
в .zip файл и добавить его в свой sys.path
.
Ответ 5
Кажется, я кое-что запомнил, что это невозможно, и что у Python People есть причины не сделать это возможным, хотя я не могу вспомнить, где.
EDIT: извините, я неправильно понял вопрос: я имел в виду, что это невозможно (я думаю), чтобы настроить исполняемый файл Python, чтобы поместить его файлы байт-кода в другой каталог по умолчанию. Вы всегда можете написать небольшой компилятор Python script (или найти его, я уверен, что они там), который поместит файлы байт-кода в выбранное вами местоположение.
Ответ 6
Вы можете написать script, чтобы скомпилировать их, а затем переместить их. Что-то вроде:
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
)