我已经尝试了几个小时,想通过 pyinstaller 的文档弄清楚如何做到这一点,但我没有任何运气。
我有一个 .py 文件,我需要将其制作成一个在 Windows 7 中可执行的 .exe 文件,以及一个在 OS X Lion 中可执行的 .app(或任何可用的)可执行文件。问题是每当我使用
python pyinstaller.py my_code.py
它编译成 linux 可执行文件。
最佳答案
Pyinstaller 不会为跨平台目标构建可执行文件,仅针对“本地”运行 Pyinstaller 的平台。但是,WINE 允许在 Linux 下运行 native Windows Pyinstaller,因此它可以用于将在 Linux 上开发的 Python 脚本构建为 native Windows .exe 可执行文件,仅使用单个 Linux 主机 - 无需单独的 Windows 主机。这些说明不针对 Mac。
我在 64 位奔腾机型上使用 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。在没有 super 用户的情况下运行 pip 权限可能会失败。
$ 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 , Pyinstaller 默认,它不包括挂起的文件 单个可执行文件。那不应该构建/运行与 onefile 版本,但调试 onedir 会更容易 然后也应该将 OK 构建为一个文件。
确保安装了 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
升级 Windows pip 并使用 WINE Python/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 native 环境。运行窗口 WINE 下的 Pyinstaller 生成原生 Windows .exe 可执行文件。 使用 Windows Pyinstaller 的 Windows Python 脚本版本来 与你测试过的 OK Linux Pyinstaller 程序保持一致, 针对你的 Linux 文件系统中的 python 项目(它不 需要复制到 WINE Windows 文件系统)。保持 Windows build和dist目录分开测试OK Linux one可以帮助调试打包程序。
$ 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]
关于python - 在 Ubuntu 上将 .py 编译成 windows 和 mac 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17709813/