2012-02-15 58 views
3

如果我把我的项目放在/ usr/bin/超出主文件夹.pyc文件?

我的python解释器会生成字节码吗?如果是这样,它将它们放在哪里,因为文件在该文件夹中没有写入权限。它将它们缓存在临时文件中吗?

如果不是,那么我在该项目中出现性能损失?

我已经打包这件事作为从我的Ubuntu PPA安装一个.deb文件,因此要安装这个项目的明显的地方是在/ usr/bin中/

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

Ubuntu中肯定会安装很多python项目(显然还有其他发行版),他们如何处理这个问题?

感谢

回答

1

关于/usr/bin脚本,如果你执行你的脚本不具有权限的/usr/bin写,那么.pyc文件不会被创建,而且据我所知用户,没有任何其他的缓存机制。

这意味着您的文件每次都会由解释器进行字节编译,所以会出现性能损失。但是,可能这种损失并不明显。请注意,更新源文件时,编译文件会自动更新,而用户不会注意到它(至少大部分时间)。

我看到的是,Ubuntu中的常见做法是使用/usr/bin中的小脚本,甚至没有.py扩展名。这些脚本的字节编译速度非常快,所以您不必担心这一点。他们只是进口一个图书馆,并打电话给某种library.main.Application().run()方法,就这些了。

请注意,该库安装在不同的路径中,并且所有库文件都是针对不同的python版本进行字节编译的。如果您的包装中不是这种情况,那么您必须检查您的文件setup.py和您的debian文件,因为这不是它应该的方式。

+0

非常感谢。所以我认为答案应该是在我的机器上编译并在.deb文件中分发.pyc文件。 – Caustic 2012-02-16 07:43:02

+0

@Caustic不,你分发你的源文件和打包脚本,在为每个可用的python安装安装时,都要编译它们。请看[包装指南](https://wiki.ubuntu.com/PackagingGuide/Python)。 – jcollado 2012-02-16 08:13:47

+0

* facepalm *当然是。感谢堆!这是最有意义的。 – Caustic 2012-02-16 08:47:10

1

不会为直接运行的脚本生成.pyc/.pyo文件。 Python模块放置在通常需要Python模块并打包的位置,可以在构建时或安装时生成.pyc/.pyo文件,因此不是最终用户的问题。