Я разрабатываю несколько приложений на Python для своих внутренних пользователей. У нас есть фреймворк, разработанный с использованием C# и wpf, который есть у каждого пользователя в своей системе. Теперь, чтобы пользователи могли получить доступ к приложению python из этой структуры, одним из вариантов было попросить каждого пользователя установить python в свою систему, что невозможно. После некоторого исследования в Google я наткнулся на библиотеки морозильной камеры python.
Я смог связать или заморозить тензорный поток, приложение django Matlab и разместить его в нашей структуре, не прося пользователя установить python с помощью pyinstaller. Но для фляжки я не могу найти подходящую морозильную камеру.
Есть ли морозильная камера для колб? Мои требования - создать автономный исполняемый файл для моего фляжного приложения. У меня на сервере сборки есть как python 3, так и python 2.
В настоящее время в нашей фирме не используются докеры и облако. И у нас есть много пользователей, которые создают свои собственные приложения, нанимая внешних разработчиков. Но как только они разработают свое приложение, им придется ждать месяцами, чтобы запустить его в производство. Итак, нам нужно поддерживать все типы приложений python, .net, spa и т. д. В нашей структуре ... это похоже на то, что мне нужно быть готовым ко всем типам приложений. Вот почему. У нас нет контроля над тем, какое приложение нам предоставят пользователи. И это будет временное решение.
наконец нашел решение. . Закончился использованием cx_freeze и после некоторых изменений смог заставить работать колбу.
Если вы нашли рабочее решение, было бы справедливо опубликовать собственное решение должным образом и помочь другим людям понять, что означают "некоторые изменения".






Описанный ниже подход не использует морозильную камеру и подходит для python3 и работает на Mac и Linux.
Чтобы использовать python2, измените инструмент shebang и pip для использования python2
Значительные части информации ниже (помимо примера фляги и зависимостей…) упомянуты в этом сообщении блога Объединение файлов Python в автономный исполняемый файл
Дополнительная информация, относящаяся к приложению zip, объясняется в Формат архива приложения Python Zip.
Предположим, приложение Flask выглядит следующим образом:
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
И вот оно, приложение - это автономная программа на Python со всеми соответствующими зависимостями.
Более сложные программы потребуют дополнительных настроек и могут не работать с этим подходом из коробки.
Самая большая программа, которую я нашел с использованием такой схемы, - это youtube-dl Что это за двоичный файл? Куда пропал код?.
Спасибо за обновления. попробует и сообщит вам.
Зачем вы вообще сделали это как веб-приложение, если каждому пользователю нужно установить его в своей системе?