【问题标题】:cx_Freeze how to avoid packages getting installed in lib folder?cx_Freeze 如何避免软件包安装在 lib 文件夹中?
【发布时间】:2018-12-12 07:25:59
【问题描述】:

当我构建安装程序并安装应用程序时,它会将所有包安装在 lib 文件夹中,而我的代码是从当前目录而不是 lib 中选择导入。

如何使包与可执行文件位于同一目录中?

下面是我的脚本:

from cx_Freeze import setup, Executable 

buildOptions = dict(excludes = ["tkinter"], includes =["idna.idnadata"], optimize=1)

setup(name = "SoftwareGateway" , 
      version = "0.1" , 
      description = "" , 
      options =dict(build_exe = buildOptions),
      executables = [Executable("main.py", base = base)])

【问题讨论】:

    标签: python python-2.7 cx-freeze


    【解决方案1】:

    据我了解,cx_Freeze 5.1.1(当前版本)或5.1.0 无法完成您的要求。

    您可以使用以前的稳定版本cx_Freeze 5.0.2,它不会将包冻结到子目录lib。要降级到此cx_Freeze 版本,请运行

    python -m pip install cx_Freeze==5.0.2
    

    cmd 终端中。

    但我实际上不明白为什么将包冻结到子目录lib 应该是一个无法克服的问题,除非是非常特殊的情况。我建议您使用包的 __file__ 属性而不是更改 cx_Freeze 版本,让您的代码从 lib 子目录中选择导入。

    【讨论】:

    • JPEG,感谢您的帮助。这些包是通过使用开发的,所有文件都是从本地文件夹中导入的。如果我必须从 lib 导入,那么我需要修改整个代码库,这是巨大的。
    • cx_Freeze 5.0.3 在运行“模块”对象没有属性“base_prefix”时引发错误。这似乎是 cx_Freeze 的一个已知错误,找不到任何解决方案。
    • @Sagar 好点(尽管您可能指的是 5.0.2,而不是 5.0.3)。如果你真的需要这个,你可以手动修补你的本地 cx_Freeze 代码,就像来自 cx_Freeze 存储库中的 this commit 一样。
    • @jpeg 我谨表示不同意。我阅读了这篇文章并安装了cx_Freeze 6.0b1,以避免将包冻结到lib 目录中;但是,这种行为仍然存在。 setup.py 中是否有我可能缺少的标志或选项来避免这种情况?谢谢!
    • @S3DEV 你完全正确,谢谢。 5.1.1 和 6.0b1 在lib 子目录方面的区别仅涉及(一些?)P​​ython 模块和包所需的 DLL,而不是 Python 模块和包本身。我从答案中删除了错误的部分。
    猜你喜欢
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2014-05-02
    • 1970-01-01
    • 2018-07-11
    • 2023-03-05
    相关资源
    最近更新 更多