Skip to main content
 首页 » 编程设计

python之为什么 basename 返回编译后的文件名

2025年05月04日23zhengyun_ustc

运行 os.path.basename(__file__) 有时给我的文件名是 foo.py,但有时它会给出 foo.pyc。我知道pyc是编译后的文件,编译后可能每次都使用它。我只是对为什么 basename 返回 pyc 文件名感到困惑?那是正常的吗?其次,如何让它始终返回未编译的文件名或不带扩展名?

请您参考如下方法:

在 Python 2 中,__file__ 反射(reflect)了为模块 * 实际加载的文件。导入模块时,Python 将首先尝试定位 .pyc 文件,如果找到,将使用该文件名,否则将是 .py 文件.

可能如果 __file__ 在解释器下一次 运行时指向一个 .py会发现它加载了一个 .pyc 文件,因为 Python 会尝试创建一个缓存文件(如果可以的话)。另请注意,可能不 .py 源文件;一些项目仅以 .pyc 文件的形式分发。最后但同样重要的是,Python 从不为顶级脚本创建 .pyc 文件。

生成.py 源文件文件名的一种安全方法是简单地从末尾去掉c;你也可以包含一个 d 来处理 .pyd 文件(优化的字节码,目前只剥离断言):

sourcefile = __file__.rstrip('cd') 

请检查文件是否确实存在!


* Python 3 更改了缓存字节码文件的存储位置,如果有源文件路径,__file__ 将使用源文件路径,即使 .pyc 文件存在。