外部文件夹中的 .pyc 文件?

3 投票
2 回答
806 浏览
提问于 2025-04-17 13:04

如果我把我的项目放在 /usr/bin/ 这个文件夹里,

我的 Python 解释器会生成字节码吗?如果会的话,它会把这些字节码放在哪里,因为这个文件夹里的文件没有写权限。它会把它们缓存到临时文件里吗?

如果不会的话,把项目放在那儿会影响性能吗?

我把这个项目打包成了 .deb 文件,并通过我的 Ubuntu ppa 安装,所以显而易见的安装位置就是 /usr/bin/。

但是如果把它放在那里不生成字节码,我该怎么办?如果它安装在别人的机器上,我能给这个项目写权限吗?那样似乎会有安全风险。

在 Ubuntu(当然还有其他发行版)上肯定有很多 Python 项目是安装好的,它们是怎么处理这个问题的呢?

谢谢!

2 个回答

1

关于在 /usr/bin 目录下的脚本,如果你以一个没有权限在 /usr/bin 写入的用户身份来执行你的脚本,那么 .pyc 文件就不会被创建。根据我所知,也没有其他的缓存机制。

这就意味着每次解释器都会重新编译你的文件,所以性能会有一些损失。不过,这种损失可能并不明显。需要注意的是,当源文件更新时,编译后的文件会自动更新,用户通常不会察觉到(至少大多数情况下是这样)。

我看到的情况是,在 Ubuntu 中,常见的做法是使用没有 .py 后缀的小脚本放在 /usr/bin 里。这些脚本的字节编译速度非常快,所以你不需要担心这个问题。它们通常只是导入一个库,然后调用某个 library.main.Application().run() 方法,就这么简单。

要注意的是,这个库是安装在不同的路径下的,并且所有库文件会针对不同的 Python 版本进行字节编译。如果你的包不是这样的话,那么你需要检查一下你的 setup.pydebian 文件,因为这不是正确的做法。

1

.pyc/.pyo 文件不会在直接运行的脚本中生成。Python模块如果放在正常的Python模块位置,并且被打包的话,就会在构建或安装的时候生成 .pyc/.pyo 文件,所以这对最终用户来说并不是问题。

撰写回答