Подход, описанный ниже, не использует морозильник и подходит для python3 и работает на Mac и Linux
Чтобы использовать python2, измените инструмент shebang и pip, чтобы использовать python2
Значительные части приведенной ниже информации (помимо примера колбы и зависимостей ...) упоминаются в этом сообщении в блоге Объединение файлов Python в отдельный исполняемый файл
Дополнительная информация, относящаяся к zip-приложению, описана в Формат архива Python-приложения
Предположим, что применение колбы выглядит следующим образом:
from flask import Flask, redirect, url_for, request
app = Flask(__name__)
@app.route('/')
def root():
static_page='''
<html>
<body>
<form action = "http://localhost:5000/login" method = "post">
<p>Enter Name:</p>
<p><input type = "text" name = "nm" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>
'''
return static_page
@app.route('/success/<name>')
def success(name):
return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['nm']
return redirect(url_for('success',name = user))
else:
user = request.args.get('nm')
return redirect(url_for('success',name = user))
def main():
app.run()
Он будет называться moosh1.py .
Теперь создаем следующую иерархию папок:
app/
| __main__.py
| moosh/
| __init__.py
| moosh1.py
Где __main__.py выглядит следующим образом:
import sys
import moosh
if __name__ == '__main__':
print("hello moosh1 - running on python %s.%s" %
(sys.version_info[0], sys.version_info[1]))
moosh.main()
и moosh / __ init__.py выглядит следующим образом:
from .moosh1 import main
__all__ = ['main']
Для удобства переноса установите зависимости от фляги в папку приложения
$ cd app
$ pip3 install flask --target ./
$ cd ..
Теперь архивируйте
$ cd app
$ zip -r ../app.zip *
$ cd ..
А теперь добавьте shebang и сделайте наше автономное приложение исполняемым
$ echo '#!/usr/bin/env python3' | cat - app.zip > app
$ chmod +x app
И вот, app - это отдельная программа на Python со всеми соответствующими зависимостями
Более сложные программы потребуют больше настроек и могут не работать с этим подходом из коробки.
Самая большая программа, которую я нашел с помощью такой схемы, - youtube-dl Что это за двоичный файл? Куда делся код?