在.Ubuntu上编译.py到windows和mac可执行文件

时间:2013-07-17 20:41:10

标签: python pyinstaller

我已经尝试了几个小时来弄清楚如何通过pyinstaller的文档来做到这一点,但我没有运气。

我有一个单独的.py文件,我需要将其制作成Windows 7中的.exe文件可执行文件,以及OS X Lion中的.app(或者任何可用的)可执行文件。问题是我什么时候使用

python pyinstaller.py my_code.py

它编译成linux可执行文件。

2 个答案:

答案 0 :(得分:4)

Pyinstaller不为跨平台目标构建可执行文件,仅针对“本机”运行Pyinstaller的平台。但是,WINE允许在Linux下运行本机Windows Pyinstaller,因此它可以用于将仅在Linux上开发的Python脚本构建为仅使用单个Linux主机的本机Windows .exe可执行文件 - 无需单独的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。没有超级用户的运行点 特权可能会失败。

    $ 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,the Pyinstaller默认,不包括下载文件 单可执行文件这不应该建立/运行任何不同于 onefile版本,但它可以更容易调试onedir 然后应该建立OK作为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本机环境。运行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)

来自pyinstaller FAQ

  

我可以在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”脚本会尝试为您完成所有这些操作。