5

我一直在尝试通过 pyinstaller 的文档来弄清楚如何做到这一点,但我没有任何运气。

我有一个 .py 文件,我需要将它制作成一个在 Windows 7 中可执行的 .exe 文件,以及一个在 OS X Lion 中可执行的 .app(或任何工作)。问题是当我使用

python pyinstaller.py my_code.py

它编译成一个linux可执行文件。

4

2 回答 2

5

Pyinstaller 不会为跨平台目标构建可执行文件,仅适用于“本机”运行 Pyinstaller 的平台。然而,WINE 允许在 Linux 下运行本机 Windows Pyinstaller,因此它可用于将在 Linux 上开发的 Python 脚本构建为本机 Windows .exe 可执行文件,仅使用单个 Linux 主机 - 无需单独的 Windows 主机。这些说明不针对 Mac。

  1. 我在 64 位 Pentium 类型上使用 Ubuntu 15.10。

    $ uname -op
    x86_64 GNU/Linux
    $ grep DISTRIB_DESCRIPTION /etc/lsb-release  
    DISTRIB_DESCRIPTION="Ubuntu 15.10"
    
  2. 确保已安装 Python。

    $ apt-get install python2.7
    [installed OK]
    $ python --version
    Python 2.7.10
    
  3. (升级和)使用 Python 包管理器在 Linux 上安装和升级 Pyinstaller。在没有超级用户权限的情况下运行 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
    
  4. 您可以安装 Python/Pyinstaller、安装/配置 WINE 并以任意顺序编写 Python 代码(尽管运行代码需要安装 Python)。使用 Python 包管理器将 Python 包安装到您的 Python 项目中。

    $ pip install package1 [package2, ...]
    [packages installed OK]
    
  5. 测试打包针对 Linux 的可执行文件。

    $ cd python-project
    $ pyinstaller --onefile python-project.py
    [built OK]
    $ dist/python-project
    [ran OK]
    

    如果它没有构建或运行正常,请尝试将其构建为 --onedir ,这是 Pyinstaller 默认的,它不包括单个可执行文件中的挂起文件。这不应该与onefile版本有任何不同的构建/运行,但是调试onedir可能更容易,然后应该将其构建为onefile也可以。

  6. 确保已安装 WINE 并将其配置为使用您选择的目标 Windows 版本(例如 Windows 7):

    $ wine --version
    wine-1.7.50
    $ winecfg
    [GUI: Applications tab > Windows Version: Windows 7]
    
  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
    
  8. 使用 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
    
  9. 使用 Windows pip 安装项目的挂起包

    $ wine C:/Python27/Scripts/pip.exe install xlwt
    [installed OK]
    
  10. 现在,您的 Windows (WINE) Python 环境已配置为等同于您的 Linux 本机环境。在 WINE 下运行 Windows 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]
    
于 2015-11-18T23:32:55.553 回答
2

pyinstaller 常见问题解答

我可以在 Linux 下运行时打包 Windows 二进制文件吗?

不,这不受支持。请为此使用​Wine,PyInstaller 在 Wine 中运行良好。您可能还想查看邮件列表中的<a href="http://groups.google.com/group/pyinstaller/browse_thread/thread/bdeab706503f067b/b87dd487528a5962" rel="nofollow">此线程。在 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。

我还没有完成所有这些,但常见问题解答中提到的邮件列表线程将是一个好的开始。这是他们使用的示例:

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”脚本试图为您完成所有这些工作。

于 2013-07-17T22:41:59.980 回答