在没有pyc扩展的情况下运行Python模块

4 投票
3 回答
2171 浏览
提问于 2025-04-16 12:27

我在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 个回答

1

如果你想让你的代码变得难以理解,可以看看关于保护Python代码的讨论。简单来说,你不能随便分发包含在.pyc文件里的Python字节码,而且也没有办法完全阻止别人查看你的代码。

1

不要重命名 .pyc 文件——它只是给解释器的一个快捷方式,这样解释器就不用重新编译已经编译过的代码了。

相反,你应该把 .py 文件重命名为 abc,然后运行 chmod +x ./abc,确保第一行是:

#!/usr/bin/python

或者甚至是

#!/usr/bin/env python

根据你对问题的描述,我猜 .pyc 文件里包含一些可以在Linux上加载的代码,这样它就能像一个二进制文件一样运行,前提是它能检查 .py 文件是否有更新版本——可能它只是启动Python解释器来加载自己或者源文件(哪个更新就加载哪个),然后继续执行。谁知道呢?也许操作系统的相关文档会告诉你,也许不会。

6

创建一个名为 'abc' 的文件,里面包含:

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

或者说这样做是不是把太多重要的源代码暴露出来了,如果他们能看到这些代码的话?

另外要注意的是,.pyc 文件在不同版本的 Python 之间是不能互相使用的。出于这个原因,重新分发源代码其实是最好的选择,这样不仅能减少用户的困扰,也能为你自己节省支持时间和成本。

撰写回答