我在Linux上编译了一个名为abc.pyc的Python 2.6程序。如果我跑
./abc.pyc
运行正常。但是,如果我将其重命名为abc(即没有pyc扩展名),则无法运行。它给出了错误消息:
ImportError: No module named abc
如何在没有.pyc扩展名的情况下运行程序?
更新: 我想运行编译(pyc)版本而不是py版本
或者,我知道我可以使用Cython将模块编译为.so文件,但是我可以将我的主Python程序编译成可以在Linux平台上执行的程序吗?如果是这样,我们将非常感谢Cython命令行示例。
已更新 我把Cython问题作为一个单独的问题提出来了。
答案 0 :(得分:6)
创建一个名为'abc'的文件,其中包含:
#!/bin/sh
/usr/bin/env python -m abc
或者如果他们可以阅读那么会泄露太多有价值的源代码?
另请注意,.pyc文件在不同版本的Python之间不可移植。除了对用户造成较少的烦恼和自己的成本降低之外,重新分配源代码的确是最好的原因(在支持时间内没有别的)。
答案 1 :(得分:1)
不要重命名.pyc
文件 - 这只是解释器的快捷方式,因此它不必重新编译已编译的代码。
相反,请将.py
文件重命名为abc
,chmod +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)
混淆.... Python Code Obfuscation