Python: как указать выходные папки в Pyinstaller.Spec-файл
Я использую python 3.5 и pyinstaller версии 3.1.1. Я указал a .файл спецификации, называемый SCADAsync_spec.спецификации следующим образом:
block_cipher = None
a = Analysis(['SCADAsync.py'],
pathex=['C:repoanalysistrunksourcepythonfunctions', 'C:repoanalysistrunksourcepythonExecutables'],
binaries=None,
datas=[('figsROMO_icon.ico','figs'),('figsOpenFile2.gif','figs'),('figsROMOWind_Logo2015_CMYK.png','figs')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='SCADAsync',
debug=True,
strip=False,
upx=True,
console=True
)
это отлично работает при выполнении с
pyinstaller SCADAsync_spec.spec
Теперь это создает две большие папки (dist и build) , которые я предпочел бы хранить в другом месте, чем в каталоге по умолчанию. Кто-нибудь знает, как установить местоположение этих папок в файле спецификации? Я хотел бы сохранить команду командной строки как можно более простой, т. е. этот.exe должен строить, просто набрав
pyinstaller SCADAsync_spec.spec
из руководства Pyinstaller кажется, что я могу указать глобалы под названием "DISTPATH" и "workpath" в файл spec (https://pythonhosted.org/PyInstaller/spec-files.html). Но я не могу понять, как это сделать.
любая помощь была бы очень признательна!
Ник
2 ответов
как указал Йонас Грегер, вы действительно можете сделать:
import PyInstaller.config
PyInstaller.config.CONF['workpath'] = "./my_build_directory"
# ... rest of spec file
однако документация в модуле config говорит, что он работает только на ограниченном количестве переменных:
этот модуль содержит конфигурацию PyInstaller во время выполнения.
Variable CONF-это dict() со всеми необходимыми параметрами конфигурации для этапа сборки. Этап сборки выполняется путем прохождения .файл спецификаций для запуска() функция. Переменная CONF-единственный способ передачи аргументы для exec () и как избежать использования глобальных переменных.
Примечание: наличие "глобальных" переменных плохо сочетается с набором тестов потому что он не обеспечивает изолированные среды для испытаний. Некоторые тесты могут не в этом случае.
Примечание: дикт "конф" () очищен после участка здания для того чтобы не помешать с любой другой возможный тест.
чтобы передать любые аргументы для построения фазы, просто сделайте:
from PyInstaller.config import CONF CONF['my_var_name'] = my_value
и использовать это переменная на этапе сборки:
from PyInstaller.config import CONF foo = CONF['my_var_name']
Это список известных переменных. (При необходимости обновите его.)
cachedir
hasUPX
hiddenimports
noconfirm
pathex
ui_admin
ui_access
upx_dir
workpath
если вы используете "DISTPATH" в столице трюк не будет работать (Pyinstaller 3.3.1 и python 2.7.13) но если вы установите нижний регистр:
import PyInstaller.config
PyInstaller.config.CONF['distpath'] = "./my_app_directory"
# ... rest of spec file
это сработает... :)
Pyinstaller spec/build / dist пути расположения могут быть настроены как часть команды pyinstaller. См. ниже пример
pyinstaller --specpath /opt/bk/spec --distpath /opt/bk/dist --workpath /opt/bk/build testscript.py