Как собрать приложение Python Flashg в отдельный исполняемый файл. - PullRequest
0 голосов
/ 10 ноября 2018

Я разрабатываю несколько приложений на Python для своих внутренних пользователей. У нас есть фреймворк, разработанный с использованием c # и wpf, который есть у каждого пользователя в своей системе. Теперь для пользователей, чтобы получить доступ к приложению python из этой среды, можно было попросить каждого пользователя установить python в этой системе, что невозможно. После некоторых исследований в Google я наткнулся на библиотеки Python Freezer

Мне удалось связать или заморозить тензорный поток, приложение django Matlab и разместить его в нашей среде, не прося пользователя установить python с помощью pyinstaller. Но для применения в колбе я не могу найти подходящий морозильник.

Есть ли морозильная камера для колб. Мои требования - создать отдельный exe-файл для моего приложения для колб. У меня есть и Python 3, и Python 2 в моей сборке сервера.

1 Ответ

0 голосов
/ 31 июля 2019

Подход, описанный ниже, не использует морозильник и подходит для 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 Что это за двоичный файл? Куда делся код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...