Замораживание приложения Python на Travis CI

1

Я пытаюсь заморозить приложение 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 похоже, успешно завершено. Что я сделал не так?

Большое спасибо,

Сэм.

https://github.com/stpettersens/super-echo

  • 0
    Я немного запутался. Пакет freeze , который вы устанавливаете с помощью pip как зависимости, не имеет ничего общего с командой "pip freeze". Модуль pip.commands.freeze не запускается как скрипт, как вы пытаетесь это сделать. Для запуска pip freeze просто запустите sh "pip freeze" . Но я не думаю, что это то, что вы пытаетесь сделать.
Теги:
makefile
travis-ci
rake

1 ответ

1
Лучший ответ

Кажется, я вижу, что здесь произошло. Возможно, вы прочитали этот вопрос, у которого был ответ, предполагающий, что freeze.py живет в модуле в pip и даже не может быть запущен как сценарий (вы можете подтвердить это, прочитав его исходный код, который просто содержит немного больше, чем определение класса),

Но я думаю, что вы ищете инструмент freeze.py, который поставляется с исходным кодом Python. Это, насколько я знаю, обычно не устанавливается и является лишь инструментом, включенным в исходный код: http://hg.python.org/cpython/file/5f5e1d408c0c/Tools/freeze

Если вы ищете инструмент для замораживания вашего сценария как автономного исполняемого файла, вы можете посмотреть на что-то вроде cx_Freeze или PyInstaller. Утилита freeze, включенная в Python, больше не поддерживается или не используется, я не думаю. За исключением, возможно, для недавней работы по обеспечению совместимости Python 3.

  • 0
    Спасибо за вашу помощь. Я просто хотел запустить утилиту freeze.py чтобы сгенерировать необходимый код на C и Makefile для которого я могу вызвать компилятор. Могу ли я установить cx_Freeze через pip а затем запустить его? Это тоже сработало бы.
  • 0
    Это зависит от того, что именно вы пытаетесь выполнить, но, например, cx_Freeze не выводит файл C или Makefile - он просто выводит двоичный исполняемый файл, а не требует его компиляции. Он также (по умолчанию) создает файл .zip, содержащий все ваши модули Python, хотя особенности могут быть изменены. Посмотрите на документы и посмотрите, делает ли он то, что вам нужно.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню