【问题标题】:How To Bundle .jar Files with Pyinstaller如何使用 Pyinstaller 捆绑 .jar 文件
【发布时间】:2014-07-25 19:25:02
【问题描述】:

如何让pyinstaller 将 .jar 文件捆绑为使用它们的 python 项目的存档?

例如,制作一个 exe(我使用pyjnius 来处理sikuli-standalone jar):

# test.py
import os
import sys

# set the classpath so java can find the code I want to work with
sikuli_jar = '/sikuli-api.standalone-1.0.3-Pre-1.jar'
jarpath = os.path.dirname(os.path.realpath(__file__)) + sikuli_jar
os.environ['CLASSPATH'] = jarpath

# now load a java class
from jnius import autoclass
API = autoclass('org.sikuli.api.API')

Pyisntaller 使用以下命令创建(一个文件夹)exe:

pyinstaller -d test.py

但据我所知,jar 没有捆绑,exe 无法访问除非您手动将它放在 Pyinstaller 生成的文件夹中

根据Pyinstaller manual

“CArchive 包含您想要填充的任何内容。它非常 像一个 .zip 文件。”

然后我尝试编辑 之前自动生成的 test.spec 文件:

jar = 'sikuli-api.standalone-1.0.3-Pre-1.jar'
jar_path = 'C:\\Python27\\Lib\\site-packages\\sikuli-0.1-py2.7.egg\\sikuli\\' + jar
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               [('sikulijar', jar_path, 'PKG')],
               strip=None,
               upx=True,
               name='test')

我尝试使用以下规范文件构建 exe:

python C:\workspace\code\PyInstaller-2.1\PyInstaller\build.py --onefile test.spec

但是什么都没有发生,也没有错误返回。有人可以提供一个简单的分步教程如何做到这一点吗?非常感谢!

【问题讨论】:

    标签: python jar pyinstaller specifications pyjnius


    【解决方案1】:
    coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               [('sikulijar', jar_path, 'PKG')],
               strip=None,
               upx=True,
               name='test')
    

    将元组中的“sikulijar”更改为jar(您已经定义的变量)。您需要引用您在代码中使用的相同名称。

    但是,我仍在尝试让 JVM 正确初始化。如果我弄清楚了,我会发布。

    【讨论】:

      【解决方案2】:

      安装有效的虚拟环境后,我通过 jnius 打包了一个与 python 互操作的 jar:

      addFiles=" \
      --add-data project/resources/jnius.so:jnius \
      --add-data relative-path-to-jar.jar:resources \ # <-- example jar
      --add-data any-other-resources:resources \
      "
      
      source ./venv/bin/activate
      ./venv/bin/pip install -r ./requirements.txt
      
      ./venv/bin/pyinstaller --onefile ${addFiles} project/mainModule.py --log-level WARN --hidden-import=jnius_config
      

      【讨论】:

        猜你喜欢
        • 2011-12-02
        • 2012-12-06
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多