我已经尝试了几个小时来弄清楚如何通过pyinstaller的文档来做到这一点,但我没有运气。
我有一个单独的.py文件,我需要将其制作成Windows 7中的.exe文件可执行文件,以及OS X Lion中的.app(或者任何可用的)可执行文件。问题是我什么时候使用
python pyinstaller.py my_code.py
它编译成linux可执行文件。
答案 0 :(得分:4)
Pyinstaller不为跨平台目标构建可执行文件,仅针对“本机”运行Pyinstaller的平台。但是,WINE允许在Linux下运行本机Windows Pyinstaller,因此它可以用于将仅在Linux上开发的Python脚本构建为仅使用单个Linux主机的本机Windows .exe可执行文件 - 无需单独的Windows主机。这些说明不针对Mac。
我在64位Pentium类型上使用Ubuntu 15.10。
$ uname -op
x86_64 GNU/Linux
$ grep DISTRIB_DESCRIPTION /etc/lsb-release
DISTRIB_DESCRIPTION="Ubuntu 15.10"
确保已安装Python。
$ apt-get install python2.7
[installed OK]
$ python --version
Python 2.7.10
(升级和)使用Python包管理器来安装和 可能在Linux上升级Pyinstaller。没有超级用户的运行点 特权可能会失败。
$ sudo -H pip install --upgrade pip
[upgraded OK]
$ sudo -H pip install PyInstaller
[installed OK]
$ sudo -H pip install --upgrade pyinstaller
[installed OK]
$ pyinstaller --version
3.0
您可以安装Python / Pyinstaller,安装/配置WINE并编写 任何顺序的Python代码(虽然运行代码需要Python 安装)。使用Python包管理器安装Python 包含在Python项目中的包。
$ pip install package1 [package2, ...]
[packages installed OK]
测试打包针对Linux的可执行文件。
$ cd python-project
$ pyinstaller --onefile python-project.py
[built OK]
$ dist/python-project
[ran OK]
如果它没有构建或运行正常,请尝试将其构建为--onedir,the Pyinstaller默认,不包括下载文件 单可执行文件这不应该建立/运行任何不同于 onefile版本,但它可以更容易调试onedir 然后应该建立OK作为onefile。
确保已安装WINE并将其配置为使用您选择的 目标Windows版本(例如Windows 7):
$ wine --version
wine-1.7.50
$ winecfg
[GUI: Applications tab > Windows Version: Windows 7]
使用WINE安装Windows Python,pywin32(Windows GUI 扩展);匹配他们的版本。你应该去每个人 安装程序的下载页面,适用于正确的版本和镜像 比这些当前的直接下载链接。请注意运行WINE 将大量WINE错误通知转储到控制台;这些是 在这个程序中几乎都可以忽略不计。
$ mkdir -p /opt/windows $ pushd /opt/windows
$ wget https://www.python.org/ftp/python/2.7.10/python-2.7.10.amd64.msi
$ wget http://iweb.dl.sourceforge.net/project/pywin32/pywin32/Build%20219/pywin32-219.win-amd64-py2.7.exe
$ wine msiexec -i python-2.7.10.amd64.msi $ wine msiexec -i pywin32-219.win-amd64-py2.7.exe
$ popd
我遇到Python 2.7.10 MSI向导无法“下一步”的问题 选择安装目录后,我在那里取消了 再次运行它添加了禁止GUI的-qn选项。它 抱怨了一点,但它完成了安装。如果你需要 默认情况下,在Linux文件系统中查找Windows Python 安装在Linux用户的默认WINE“C:”目录中 主目录,即。 〜/ .wine / drive_c / Python27。
$ wine C:/Python27/python --version Python 2.7.10
$ find ~/.wine/drive_c -name python.exe ~/.wine/drive_c/Python27/python.exe
使用WINE Python / pip升级Windows pip并安装Pyinstaller。
$ wine C:/Python27/Scripts/pip.exe install --upgrade pip
[upgraded OK]
$ wine C:/Python27/Scripts/pip.exe --version
pip 7.1.2 from C:\Python27\lib\site-packages (python 2.7)
$ wine C:/Python27/Scripts/pip.exe install pyinstaller
[installed OK]
$ wine c:/Python27/python.exe C:/Python27/Scripts/pyinstaller-script.py --version
3.0
使用Windows pip安装项目的下垂包
$ wine C:/Python27/Scripts/pip.exe install xlwt
[installed OK]
现在配置了Windows(WINE)Python环境 等效于您的Linux本机环境。运行Windows WINE下的Pyinstaller生成本机Windows .exe可执行文件。 使用Windows Pyinstaller的Windows Python脚本版本 与您测试的OK Linux Pyinstaller程序保持一致, 对你的Linux文件系统中的python项目(它没有 需要复制到WINE Windows文件系统)。保持 Windows build和dist目录与测试的OK分开 Linux可以帮助调试打包程序。
$ wine c:/Python27/python.exe C:/Python27/Scripts/pyinstaller-script.py --onefile --workpath=./win-wrk --distpath=/opt/windows python-project.py
[packaged OK]
$ ls -F /opt/windows/python-project.exe
python-project.exe*
$ wine /opt/windows/python-project.exe
[Windows app runs OK]
答案 1 :(得分:2)
我可以在Linux下运行时打包Windows二进制文件吗?
不,这不受支持。请 使用Wine,PyInstaller在Wine中运行良好。你可能也想要 看看this thread in the mailinglist。在版本1.4我们 已经建立了一些支持,但它只显示工作的一半。 它需要在另一个分区上安装一些Windows系统 仅适用于纯Python程序。只要你想要一个像样的GUI (gtk,qt,wx),无论如何你需要安装Windows库。所以 只使用Wine会更容易。
换句话说,您不能简单地在Linux中运行命令来构建Windows可执行文件(或者就此而言的Mac可执行文件),就像您尝试的那样。他们为Windows(仅适用于Windows)提供的解决方法是安装Wine。
Wine是一个允许Windows程序在Linux上运行的程序。它创建了一个复制Windows环境的环境。我们的想法是,您可以在此环境中安装Python(使用Windows Python安装程序)以及您需要的任何其他库(例如pyinstaller)。然后,仍然在该环境中,运行python pyinstaller。
我还没有完成所有这些,但FAQ中提到的邮件列表主题将是一个良好的开端。以下是他们使用的示例:
PYDIR="c:/Python27"
PYTHON="wine $PYDIR/python.exe"
WINPWD=$(winepath -w $(pwd))
cd pyinstaller
$PYTHON Configure.py
$PYTHON Makespec.py -p $WINPWD $WINPWD/diceroller.py
$PYTHON Build.py diceroller/diceroller.spec
看起来这会使用旧的“Configure.py”,“Makespec.py”和“Build.py”,而现在“pyinstaller.py”脚本会尝试为您完成所有这些操作。