在没有pyc扩展的情况下运行Python模块
我在Linux上有一个编译好的Python 2.6程序,叫做abc.pyc。如果我运行
./abc.pyc
它可以正常运行。但是如果我把它改名为abc(也就是去掉.pyc后缀),它就无法运行了。出现了这个错误信息:
ImportError: No module named abc
我该如何在没有.pyc后缀的情况下运行我的程序呢?
更新: 我想运行的是编译后的(pyc)版本,而不是.py版本。
另外,我知道可以使用Cython把模块编译成.so文件,但我能否把我的主Python程序编译成可以在Linux平台上执行的文件呢?如果可以的话,能给我一个Cython命令行的例子吗?
更新 我已经把关于Cython的问题单独提出来了。
3 个回答
如果你想让你的代码变得难以理解,可以看看关于保护Python代码的讨论。简单来说,你不能随便分发包含在.pyc
文件里的Python字节码,而且也没有办法完全阻止别人查看你的代码。
不要重命名 .pyc
文件——它只是给解释器的一个快捷方式,这样解释器就不用重新编译已经编译过的代码了。
相反,你应该把 .py
文件重命名为 abc
,然后运行 chmod +x ./abc
,确保第一行是:
#!/usr/bin/python
或者甚至是
#!/usr/bin/env python
根据你对问题的描述,我猜 .pyc
文件里包含一些可以在Linux上加载的代码,这样它就能像一个二进制文件一样运行,前提是它能检查 .py
文件是否有更新版本——可能它只是启动Python解释器来加载自己或者源文件(哪个更新就加载哪个),然后继续执行。谁知道呢?也许操作系统的相关文档会告诉你,也许不会。
创建一个名为 'abc' 的文件,里面包含:
#!/bin/sh
/usr/bin/env python -m abc
或者说这样做是不是把太多重要的源代码暴露出来了,如果他们能看到这些代码的话?
另外要注意的是,.pyc 文件在不同版本的 Python 之间是不能互相使用的。出于这个原因,重新分发源代码其实是最好的选择,这样不仅能减少用户的困扰,也能为你自己节省支持时间和成本。