Я пытаюсь заморозить приложение Python в Travis CI через проект Github. Мне удается успешно вызвать установку утилиты freeze.py
через pip
в Travis, но когда я пытаюсь заморозить программу Python, она запускается, но не генерирует необходимые C и Makefile, необходимые для создания исполняемого файла.
Это мой .travis.yml
:
language: python
python:
- "2.7"
# Command to install dependencies
install: "pip install freeze"
# Command to build with 'rake'
script: rake default
И это мой Rakefile:
#
# Rakefile to build standalone 'secho' Unix-like executable program on Travis CI.
# To build on your own system; please use 'make' instead.
#
freeze = "python /home/travis/virtualenv/python2.7/lib/python2.7/site- packages/pip/commands/freeze.py"
io = "secho"
task :default => [:freeze, :compile]
task :freeze do
sh "python #{io}.py python test output - OK"
sh "#{freeze} #{io}.py" # This runs but there is no console output & nothing generated.
end
task :compile do
sh "ls"
sh "make -f Makefile"
sh "strip #{io}"
sh "rm -f Makefile *.o *.c"
sh "./#{io} compiled test output - OK"
end
task :clean do
sh "rm -f #{io}"
end
task :test do
puts "dummy test"
end
Только запуск сценария с Python в первой задаче :freeze
похоже, успешно завершено. Что я сделал не так?
Большое спасибо,
Сэм.
Кажется, я вижу, что здесь произошло. Возможно, вы прочитали этот вопрос, у которого был ответ, предполагающий, что freeze.py
живет в модуле в pip и даже не может быть запущен как сценарий (вы можете подтвердить это, прочитав его исходный код, который просто содержит немного больше, чем определение класса),
Но я думаю, что вы ищете инструмент freeze.py
, который поставляется с исходным кодом Python. Это, насколько я знаю, обычно не устанавливается и является лишь инструментом, включенным в исходный код: http://hg.python.org/cpython/file/5f5e1d408c0c/Tools/freeze
Если вы ищете инструмент для замораживания вашего сценария как автономного исполняемого файла, вы можете посмотреть на что-то вроде cx_Freeze или PyInstaller. Утилита freeze, включенная в Python, больше не поддерживается или не используется, я не думаю. За исключением, возможно, для недавней работы по обеспечению совместимости Python 3.
freeze.py
чтобы сгенерировать необходимый код на C и Makefile
для которого я могу вызвать компилятор. Могу ли я установить cx_Freeze
через pip
а затем запустить его? Это тоже сработало бы.
cx_Freeze
не выводит файл C или Makefile - он просто выводит двоичный исполняемый файл, а не требует его компиляции. Он также (по умолчанию) создает файл .zip, содержащий все ваши модули Python, хотя особенности могут быть изменены. Посмотрите на документы и посмотрите, делает ли он то, что вам нужно.
freeze
, который вы устанавливаете с помощью pip как зависимости, не имеет ничего общего с командой "pip freeze". Модульpip.commands.freeze
не запускается как скрипт, как вы пытаетесь это сделать. Для запускаpip freeze
просто запуститеsh "pip freeze"
. Но я не думаю, что это то, что вы пытаетесь сделать.