【问题标题】:Importing pyw files as modules under LinuxLinux下将pyw文件作为模块导入
【发布时间】:2014-01-27 16:26:40
【问题描述】:

我从我的一位同事那里得到了一些用 Python 为 Windows 编写的代码。他正在使用几个模块,其中文件的扩展名为 mymodule.pyw 而不是 mymodule.py。这样做很简单

导入我的模块

即使没有名为 mymodule.py 的文件。但是,在 Linux(在我的情况下是 Ubuntu 13.04)中,这不起作用。我收到此表单的错误消息:

Traceback(最近一次调用最后一次): 文件“main.pyw”,第 27 行,在 导入 core.main_window

ImportError: 没有名为 main_window 的模块

只需将模块文件重命名为 .py 即可解决问题,但这并不可取,因为我想在 Windows 和 Linux 上使用相同的软件。

为什么在 Python 和 Windows 中的处理方式存在这种差异以及可以采取哪些措施来解决它?

参考资料: I seem to have found the original patch that added pyw support to windows, but with no argument as to why it shouldn't also apply to Linux.

【问题讨论】:

    标签: python windows import module


    【解决方案1】:

    pyw 扩展适用于 windows 版本的 python,因为 windows 在 CLI 和 GUI 应用程序之间有很大的区别。单独的扩展映射到单独的 python 解释器,py 到 python.exe (CLI) 和 pyw 到 pythonw.exe (GUI)。

    这仅适用于双击 python 文件以启动正确的解释器;因此,逻辑上应该具有 pyw 扩展名的唯一文件是需要双击的“入口点”脚本;所有其他文件,即使是在 Windows 上也可以而且应该使用 py 扩展名。

    在 linux 上,pyw 和 py 都不是特别有助于使脚本双击,而是应该在第一行带有“shebang”,并具有可执行文件权限(chmod +x)。在 unix 上,可执行文件通常根本没有扩展名,但如果您愿意,仍然可以以 .pyw 结尾,linux 一点也不在乎!

    【讨论】:

    • 而且,你需要chmod +x它:)
    • 这对于您实际运行的脚本是正确的,但对于您加载的模块,Windows 和 Linux 之间存在差异(没有充分的理由出现),因为 Windows 将加载 pyw 文件,而 Linux “无法处理”(或不会)。我原来的问题仍然存在,即。有没有办法让 Python(在 Linux 下)将 pyw 文件加载为模块。重命名所有 pyw 文件当然是另一种可能性,但这需要我编辑我想避免的同事程序。将 pyw 文件作为模块加载具有某些应用程序,如我在原始问题中的链接中所述。
    猜你喜欢
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2019-05-17
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多