下面所描述的方法不使用冰箱,适用于Python3,并可在Mac和Linux上运行。
如果要使用Python2,请修改shebang和pip工具以使用Python2。
除了flask示例和依赖项之外,以下信息的大部分内容在此博客文章中提到:
将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']
安装 Flask 依赖项到应用程序文件夹以实现可移植性。
$ 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 这是什么二进制文件?代码去哪了?