冷冻用拉梅尔亚姆

2024-10-04 01:34:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我没法让顾客把包裹放进去拉梅尔亚姆勒使用build_exe。在

我也尝试过将它添加到“packages”选项中,比如

build_exe_options = {
    ...
    "packages": [
        ...
        "ruamel.yaml",
        ...
    ]
    ...
}
cx_Freeze.setup(
    ...
    executables=[cx_Freeze.Executable("pyhathiprep/__main__.py",
                                  targetName="pyhathiprep.exe", base="Console")],
)

我得到了

^{pr2}$

我试着把它添加到“namespace\u packages”中,比如

build_exe_options = {
    ...
    "namespace_packages": ["ruamel.yaml"]
    ...
}
cx_Freeze.setup(
    ...
    executables=[cx_Freeze.Executable("pyhathiprep/__main__.py",
                                  targetName="pyhathiprep.exe", base="Console")],
)

我得到了

File "C:\Users\hborcher\PycharmProjects\pyhathiprep\.env\lib\site-packages\cx_Freeze\finder.py", line 221, in _FindModule
return None, module.__path__[0], info
TypeError: '_NamespacePath' object does not support indexing

我做错什么了?在


Tags: pybuildyamlmainpackagessetupruamelexe
3条回答

ruamel.yamldoc清楚地表明,必须使用pip和{}的最新版本来安装ruamel.yaml。在

CX\u Freeze不调用pip,也不支持从(正确的预配置).whl文件安装。相反,它似乎确实以自己的方式调用setup()。在

您可以尝试在源目录中创建一个ruamel目录,然后在该目录中创建一个空的__init__.py文件和yaml目录。在这个yaml目录中,从一个未打包的latest version of ^{}跳过{}和所有其他安装cruft中复制所有{}文件。或者,您可以从Bitbucket中签出这些文件,但这样会有更多不必要的问题需要处理,并且如果不按release标记签出,则会有一个未发布的中间版本的轻微风险。
一旦成功,您将在冻结的应用程序中拥有ruamel.yaml的“纯”Python版本。在

如果您使用的是yaml = YAML(typ='safe')yaml = YAML(typ='unsafe'),并且您希望基于C的加载程序和转储程序能够提高速度,那么您应该看看使用PyPI上提供的Windows .whl文件。它们包括_ruamel_yaml.cpXY-win_NNN.pyd文件。如果您不知道您的目标(python和/或win32 | win|amd64),您应该能够包括所有这些,并且ruamel.yaml将在启动时选择正确的目标(实际上它只知道from _ruamel_yaml import CParser, CEmitter),并假设python解释器知道该做什么)。在

我对azure也有同样的问题。问题是微软构建azure包的方式-你可以导入天哪。什么。还有什么.module,但无法直接导入azure。cx_freeze需要能够直接找到文件夹azure(或者在您的例子中,是文件夹ruamel),而不仅仅是子文件夹。在

我必须转到我正在访问的azure文件夹下的每个目录,确保那里有一个init.py文件。在那之后,克苏·弗雷泽找到了它。在

另一个选择是直接将文件夹从您知道的路径(直接链接到站点包,或将ruamel目录复制到您的程序目录中并从那里复制)复制到构建文件夹中,作为安装的一部分。我对数据文件这样做:

import shutil
shutil.copytree("icons","build/exe.win32-3.6/icons")

好吧,我想出了一个解决办法。我想可能是冷冻室里的一个虫子。如果我pip安装拉美尔基地以及拉梅尔亚姆勒cx冻结似乎安装一切都正确。这是真的,即使我要求它只包括拉梅尔亚姆勒. 在

如果我两者都有拉美尔基地以及拉梅尔亚姆勒安装,然后这个工作。。。在

build_exe_options = {
    ...
    "namespace_packages": ["ruamel.yaml"]
    ...
}
cx_Freeze.setup(
    ...
    executables=[cx_Freeze.Executable("pyhathiprep/__main__.py",
                              targetName="pyhathiprep.exe", base="Console")],
)

相关问题 更多 >