Linux下将pyw文件作为模块导入

Han*_*off 6 python windows import module

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

导入我的模块

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

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

导入错误:没有名为 main_window 的模块

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

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

参考资料: 我似乎找到了为 windows 添加了 pyw 支持的原始补丁,但没有争论为什么它不应该也适用于 Linux。

Sin*_*ion 2

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 一点也不关心!

  • 对于您实际运行的脚本来说确实如此,但对于您加载的模块,Windows 和 Linux 之间存在差异(似乎没有充分的理由),因为 Windows 将加载 pyw 文件,而 Linux“无法处理该文件”(或不会)。我原来的问题仍然存在,即。有没有办法让Python(在Linux下)将pyw文件作为模块加载。当然,重命名所有 pyw 文件是另一种可能性,但这需要我编辑我想避免的同事程序。将 pyw 文件作为模块加载具有某些应用程序,如我在原始问题中的链接中提到的。 (3认同)