运行没有pyc扩展名的python模块

时间:2011-02-24 13:27:37

标签: python

我在Linux上编译了一个名为abc.pyc的Python 2.6程序。如果我跑

./abc.pyc

运行正常。但是,如果我将其重命名为abc(即没有pyc扩展名),则无法运行。它给出了错误消息:

ImportError: No module named abc

如何在没有.pyc扩展名的情况下运行程序?

更新: 我想运行编译(pyc)版本而不是py版本

或者,我知道我可以使用Cython将模块编译为.so文件,但是我可以将我的主Python程序编译成可以在Linux平台上执行的程序吗?如果是这样,我们将非常感谢Cython命令行示例。

已更新 我把Cython问题作为一个单独的问题提出来了。

4 个答案:

答案 0 :(得分:6)

创建一个名为'abc'的文件,其中包含:

#!/bin/sh
/usr/bin/env python -m abc

或者如果他们可以阅读那么会泄露太多有价值的源代码?

另请注意,.pyc文件在不同版本的Python之间不可移植。除了对用户造成较少的烦恼和自己的成本降低之外,重新分配源代码的确是最好的原因(在支持时间内没有别的)。

答案 1 :(得分:1)

不要重命名.pyc文件 - 这只是解释器的快捷方式,因此它不必重新编译已编译的代码。

相反,请将.py文件重命名为abcchmod +x ./abc,并确保第一行显示为:

#!/usr/bin/python

甚至

#!/usr/bin/env python

根据您对问题的解释,我猜测 .pyc文件包含一些Linux可加载代码,可以让它作为二进制文件运行,提供它可以检查.py文件是否有更新的版本 - 可能只是启动python解释器加载自身或源文件(以较新者为准)然后继续。谁知道?也许os特定的文档会告诉你。也许他们不会。

答案 2 :(得分:1)

如果您希望对代码进行模糊处理,请参阅this discussion on protecting Python code。基本上,你不能大肆分发包含.pyc文件的Python字节码,并且没有办法阻止人们窥视你的代码。

答案 3 :(得分:0)