- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 CX_Freeze 卡住我的一个 Python 程序。构建系统在 Windows 中运行良好。我可以创建一个具有可执行文件和必要依赖项的目录,该目录将在任何 Windows 系统中运行。
当我在 Linux 中尝试相同的操作时,构建部分
python setup.py
工作正常。但是当我尝试运行构建的可执行文件时,它给出了以下错误。
File "/usr/local/lib/python2.7/dist-packages/cx_Freeze/initscripts/Console.py", line 27, in <module>
exec code in m.__dict__
File "test.py", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/guidata/__init__.py", line 540, in <module>
import guidata.config
File "/usr/local/lib/python2.7/dist-packages/guidata/config.py", line 19, in <module>
add_image_module_path("guidata", "images")
File "/usr/local/lib/python2.7/dist-packages/guidata/configtools.py", line 100, in add_image_module_path
add_image_path(get_module_data_path(modname, relpath=relpath), subfolders)
File "/usr/local/lib/python2.7/dist-packages/guidata/configtools.py", line 86, in add_image_path
for fileobj in os.listdir(path):
OSError: [Errno 20] Not a directory: '/home/user/tmp/dist/library.zip/guidata/images'
guidata 似乎正在尝试在不存在的library.zip/guidata/images 目录下查找图像。我确保在 Windows 和 Linux 上运行相同版本的 guidata、cx_Freeze。感谢任何解决问题的帮助。
最小示例
import guidata
_app = guidata.qapplication() # not required if a QApplication has already been created
import guidata.dataset.datatypes as dt
import guidata.dataset.dataitems as di
class Processing(dt.DataSet):
"""Example"""
a = di.FloatItem("Parameter #1", default=2.3)
b = di.IntItem("Parameter #2", min=0, max=10, default=5)
type = di.ChoiceItem("Processing algorithm",
("type 1", "type 2", "type 3"))
param = Processing()
param.edit()
安装文件
import sys
import os
"""Create a stand-alone executable"""
try:
import guidata
from guidata.disthelpers import Distribution
except ImportError:
raise ImportError, "This script requires guidata 1.4+"
def create_executable():
"""Build executable using ``guidata.disthelpers``"""
dist = Distribution()
dist.setup(name='Foo', version='0.1',
description='bar',
script="test.py", target_name='test.exe')
dist.add_modules('guidata', 'guiqwt')
# Building executable
dist.build('cx_Freeze')
if __name__ == '__main__':
create_executable()
最佳答案
好的。这是我自己的问题的答案。经过大量挖掘后,我意识到这是 guidata 和/或 python 的 os.path 模块中的一个错误。发生的事情是这样的。在 guidata 模块上的 configtools.py 文件中,有一个函数 get_module_data_path,用于检查/foo/bar/library.zip/yap 等路径的父“目录”是否是一个文件。
import os.path as osp
...
...
datapath = get_module_path(modname)
parentdir = osp.join(datapath, osp.pardir)
if osp.isfile(parentdir):
# Parent directory is not a directory but the 'library.zip' file:
# this is either a py2exe or a cx_Freeze distribution
datapath = ...
现在测试
osp.isfile("/foo/bar/library.zip/yap/..")
在 Windows 中返回 True,但在 Linux 中返回 False。这破坏了代码。 Python 文档没有明确说明这是一个错误还是预期的行为。
目前我没有解决方案,但有一个 hack。我将上面的代码修改为:
import os.path as osp
...
...
datapath = get_module_path(modname)
parentdir = osp.join(datapath, osp.pardir)
parentdir2 = osp.split(datapath.rstrip(os.path.sep))[0]
if osp.isfile(parentdir) or osp.isfile(parentdir2):
# Parent directory is not a directory but the 'library.zip' file:
# this is either a py2exe or a cx_Freeze distribution
datapath = ...
一切都很好。
关于linux - CX_Freeze 和 guiqwt 适用于 Windows,不适用于 Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14111366/
我正在尝试编译一个 python 程序,我使用的是 python 3.2。所以我下载了 cx_freeze 并安装了它。当我尝试在 cmd 中运行 setup.py 时,它说: "importerro
我正在尝试将我的 python 3.4 程序转换为 exe 以供分发。我尝试使用 cx_Freeze 来做到这一点。但是,当我使用此 setup.py 运行 python setup.py build
我在使用 cx_Freeze-5.0.1-cp36-cp36m-win32.whl 将 python 3.6 编译为 exe 时遇到问题,请帮助我。 我已经从http://www.lfd.uci.ed
比方说 numpy_example.py是: import numpy as np a = np.array([1, 2, 3]) print(a) 使用 Python 2.7.9,使用 cxFree
我正在使用 python 3.7 和 cx_Freeze 5.1.1 ,我试图将我的 python 脚本转换为可执行文件,但我遇到了丢失模块错误,我被难住了。 我尝试将模块放入包中并包含安装脚本,但没
我正在尝试为 Python 3.3 安装 cx_Freeze。但是,在编译源代码时出现此错误 gcc -pthread build/temp.linux-i686-3.3/source/bases/C
tss.py --> 该文件包含一个打开另一个 python 文件 (dark.py) 的子进程 import subprocess as sp def process(): programN
所以我的 python 脚本依赖于我创建的另一个模块。该模块读取文本文件。当我从源代码运行并且一切正常时,脚本、模块和它读取的文件通常位于同一目录中。 我用cx_freeze编译,当我运行它时,导入的
我有一个应用程序,可以在运行时将一些内容打印到控制台。但作为独立的可执行文件不会在控制台上打印任何内容? setup.py 脚本如下所示: import sys from cx_Freeze impo
我尝试将我的(正常工作的)python 3.6 tkinter gui 应用程序构建为 Windows 可执行文件。经过几个小时的尝试,出现了一个错误(有一些名称和 dll 问题),我让它运行了。但它
目前我正在使用 pyinstaller 来捆绑我的 python 应用程序。我同样迁移到 pyGObject(由于 pygtk 被折旧)。 现在 pyinstaller 不支持 pyGObject 并
我正在使用 cx_freeze 模块来创建安装程序和可执行文件。这似乎工作正常,但在运行可执行文件时,我收到以下错误和回溯。 D:\>"app.exe" Traceback (most recent
我可以使用 cx_freeze 来打包我的 python 工具,但是无法加载我需要的库。由于某种原因,输出的可执行文件/二进制名称不断包含在路径中。 我收到以下错误: OSError:/home/de
我正在尝试从 python 脚本(使用大量鸡蛋)构建可执行文件(适用于 32 位 Windows xp) 我考虑过 py2exe(0.6.9)、PyInstaller (1.4) 和 cx_Freez
您好,我尝试在我的 Linux 上安装 cx_Freeze,但我无法安装。我想安装它以将我的 python 应用程序 (.py) 转换为可执行应用程序。 我从这个网站下载资源:https://sour
我选择尝试使用 cx_freeze,它将我的简单 python 3.x 键盘记录器转换为 exe。我选择 cx_freeze 因为 py2exe 只是 python 2.x 我正在使用这个 setup
Adter 使用 cx-freeze python 3.6 创建一个 exe,在 Windows 中工作正常,但在 Linux 中它运行无限次而不停止,即使我只输入 print('hello word
我制作了一个程序,它使用 os.startfile() 启动另一个 python 程序。 我想把它作为两个 exe 文件,通过使用 subprocess.call() 启动第二个文件,在 1 个构建文
我目前正在尝试制作 cx_freeze在我必须使用的 Solaris 工作站上工作,以便从我拥有的 Python 脚本生成可执行文件。问题是,我不是这台机器的管理员,安装cx_freeze请求写入站点
我在将内容包含到我的 cx_Freeze 脚本中时遇到了这个问题,我试图做的是包含 easygui 和 sys,因为我在我的程序中使用它们。任何帮助将不胜感激! 代码如下: import sys fr
我是一名优秀的程序员,十分优秀!