问题标签 [pyz]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
582 浏览

python - 从 GtkBuilder 小部件的 PYZ 中的虚拟目录获取文本消息目录

是否有将 gettext 嵌入locale/xy/LC_MESSAGES/*PYZ中的既定方法?特别是让 Gtks 自动小部件翻译ZIP 存档中提取它们。

对于其他嵌入式资源pkgutil.get_detainspect/get_source工作得很好。但是系统Python gettext API依赖于bindtextdomain提供一个普通的旧的localedir;没有资源或字符串等。

因此,我无法设计出可行甚至远程实用的解决方法:

  1. 虚拟gvfs/gio路径
    现在使用archive://file%3A%2F%2Fmypkg.pyz%2Fmessages%2FIRI 可以替代直接从 zip 读取其他文件。但是glibs g_dgettext仍然只是系统库的一个薄包装。因此,任何此类 URL 都不能用作localedir.

  2. 部分提取 zip
    我认为这就是 PyInstaller 的工作方式。但是将某些东西捆绑为.pyz应用程序当然有些荒谬,只是在每次调用时都预先提取它。

  3. Userland gettext .mo/ .poextract
    现在手动读取消息目录或仅使用琐碎的字典将是一种选择。但仅适用于应用程序中的字符串。这又是没有办法让 Gtk/GtkBuilder 隐式地拾取它们。
    因此,我不得不手动遍历整个小部件树、标签、文本、内部小部件、markup_text 等。可能,但是meh

  4. 保险丝安装
    这将是超级片状的。但是,当然,可以访问 zip 内容gvfs-mount等。这似乎是某种内存占用。而且我怀疑它是否会保持可靠,例如两个应用程序实例正在运行,或者之前的不干净终止。(我不知道,由于系统库,如 gettext,绊倒了一个脆弱的 zip 熔断点..)

  5. 用于翻译的 Gtk 信号/事件(?)
    我发现对此深有感触,所以我有点确定在 Gtk/PyGtk/GI 中没有用于小部件翻译的替代机制。Gtk/Builder 期望并绑定到gettext。

也许有更可靠的方法?

0 投票
2 回答
2362 浏览

python - 如何从受密码保护的 zip 运行 python 脚本

我知道 python 模块/脚本可以从 zip 存档中运行,如下所述: https ://www.python.org/dev/peps/pep-0441/ 和 https://blogs.gnome.org/jamesh/ 2012/05/21/python-zip-files/

但我的问题是:

是否可以使用密码保护此存档或 .pyz 文件并使用另一个小型 python 脚本运行它,该脚本将发送密码然后运行__main__.py

谢谢!

0 投票
1 回答
4001 浏览

runtime-error - .PYZ 文件扩展名

我已经搜索过,但找不到读取 PYZ 文件的方法。我知道它们是一种 zip 文件,但我无法通过 zip 程序读取它们。

这是参考另一个问题,我需要访问 _init__ 在尝试构建 exe 时由 pyinstaller 创建的目录结构中的文件。在此过程中,会创建一个 out00-PYZ.pyz 文件,并且错误引用了 PYZ 内的一个文件。

此处的线程描述了如何从 EXE 反编译以获取 PYC 文件,但不适用于 PYZ 文件。

肯定有办法破解这个常用的pythonic文件吗?

提前谢谢了。

0 投票
1 回答
1038 浏览

python - 在另一台机器上使用包含 pyc 文件的 pyz

在我参与的一个项目中,我们在 Ubuntu 14.04(使用 Python 3.4)上使用 compileall.compile_dir 打包我们的 python 产品。pyc 文件的目录等被捆绑(tar.gz 文件)和分发。更改文件名以删除文件名的 cpython-34 部分。

我们有一个运行 Ubuntu 16.04 的新测试环境,该环境具有 Python 3.5,并希望运行/测试代码。当我们解压并运行它时,我们得到一个错误:

如果我手动解压缩 pyz 文件并尝试从命令行运行 python,则在导入内容后,我会收到一条消息,说明它是 3.4 二进制文件。相反,如果我在 3.5 机器上构建包,我完全可以在 3.5 机器上运行它,但是当我复制到 3.4 时,我得到了同样的错误。

问题是......我需要做什么来运行/测试它?我的想法...以某种 3.4 兼容模式运行 3.5。安装 3.4(可能来自源代码,因为我找不到 Ubuntu 16.04 的 3.4 包)。也许调整一些 3.5 配置设置?也许在打包时提供一个新设置以允许 3.4 和 3.5 工作?我假设我错过了一些想法,但我不想问我认为解决方案是什么,我想知道解决方案是什么。

谷歌搜索后发现一堆与 pyc 文件有关的 SO 问题,我知道 3.4 文件不兼容,但有没有办法使用它?

0 投票
1 回答
115 浏览

python - 调试 .pyz 可执行文件

main.py当我从控制台运行我的文件时,python main.py一切正常。但是,当我使用 zippapp 打包应用程序时,它会打开一个窗口,显然会显示一些我无法阅读的错误,因为它会立即关闭。

如何调试/解决这个问题?是否有可能以某种方式阻止它,以便我可以看到错误?

我有文件夹,其中是数据文件夹和应用程序文件夹,在应用程序文件夹中有main.py并且正在运行my_function() 。zipapp 命令:

python -m zipapp Entire_package -m app.main:my_function

0 投票
0 回答
42 浏览

python-3.x - PyWin32 和 PyInstaller:在 PYZ 中找不到 win32security

我是法国人,如果我的英语不完美,请见谅!

我有一个 PyQt5 应用程序,我想在 WindowsServer2012R2 下冻结成一个独立的可执行文件:
为此,我创建了一个具有相同操作系统的 VirtualMachine(VM):我下载了 Python 和所有需要的模块并运行了 PyInstaller。
=> 它给了我一个我在另一个虚拟机上测试过的可执行文件(没有 Python 也没有任何模块)并且它工作正常。

我将构建文件夹提供给了我的第一个用户,但可执行文件在他的 WindowsServers2012R2 上不起作用,它只显示:APP_NAME 已停止工作。

因此,我使用 PyInstaller 参数“ --debug=all ”修改了可执行文件:
我在编译时没有回溯,但是当尝试启动可执行文件时,它似乎在 win32security 导入时被阻止,因为它在以下位置停止记录:“ win32security在 PYZ 中找不到“。出现“应用程序停止工作”弹出窗口,之后没有任何反应。 为了确定这是来自 PyWin32 的问题,我完全删除了在我的代码中使用他的模块,我再次编译它并在用户 Windows 机器上运行。

有关信息,我在我的应用程序中使用 PyWin32,以便使用另一个兼容的应用程序(win32pipe 和 win32file)创建 Windows 管道。我不使用 win32security 但它似乎是作为依赖项导入的。

我有两个问题:

  • 有人知道这里发生了什么吗?
  • 如何在调试分析中走得更远?

感谢您的时间 !
Nicos44k

0 投票
0 回答
101 浏览

python - Python 2 到 Python 3 的转换:在 pyz 中找不到 __main__ 模块

我正在努力将 python2 项目移植到 python3,同时保持与 python2 的兼容性。我开始修复一些小问题:缩进、打印调用、一些使用 6 的导入等。

Makefile 创建一个带有 python 标头的 zip 存档,因此它会生成一个 pyz 文件。在这个存档的根目录中有一个 __main__.py 文件。

当我使用 python3 运行存档时,它给出了以下错误:

# python3 proj.pyz

/usr/bin/python3:在“proj.pyz”中找不到“__main__”模块

如果我运行 __main__.py 文件而不是存档,就会发生一件有趣的事情,它的工作方式与在 python2 上的工作方式相同。另外,如果我用 python2 运行 pyz 它也可以。知道为什么会这样吗?

固定的:

经过一番调试,发现包内有一个runpy.py(用于python 2)脚本。因此,python 解释器优先考虑这个而不是机器上的那个。我删除了它,现在它工作正常。

注意:我把问题留在这里,因为也许有人需要这个。