重用Python代码的最佳实践
我写了一个Python库应用(里面有几个*.py文件)。我的几个Python项目需要重复使用这个库里的代码。请问有什么好的方法来重用Python代码呢?目前我想到了三个选择:
- 复制粘贴。这绝对不是一个好方法。这样做违反了DRY原则(不要重复自己)。
- 把库应用的文件夹添加到环境变量PYTHONPATH中:
export PYTHONPATH=/path/to/library/app
。这样同一台电脑上的所有项目都可以引用库应用里的代码。 - 在Python代码中把库应用的文件夹添加到sys.path中:
sys.path.append('/path/to/library/app')
在这三个选项中,你更喜欢哪一个?它相比其他两个选项有什么优势?你还有其他更好的选择吗?如果有经验丰富的Python开发者能回答这个问题,那就太好了。
4 个回答
如果这是一个共享库,你应该把它打包好,然后放到 site-packages 里,这样你就不用担心设置任何东西了。这是最好的选择。
如果你不想使用 site-packages,那就用 PYTHONPATH。它存在的目的就是为了这个,它是实现你想要的功能的正确方式。
你可能想了解一下使用 site.addsitedir,因为 path.append 不会防止重复。这个方法还可以让你使用 .pth 文件。
通过 sys.path
动态设置或添加东西到 PYTHONPATH 也能达到同样的效果,但如果你想重复使用你的新库,这样做可能会让事情变得复杂。如果你的路径发生变化,你就得修改代码,而不是环境变量。除非绝对必要,否则不建议动态设置你的 Python 路径。
复制和粘贴并不是一种重用的方式。你并没有真正重用什么,只是在重复,反而增加了维护的难度。
在你提到的三个选择中,使用 PYTHONPATH 是最好的办法。复制粘贴显然不行,而在其他项目中添加代码来修改 sys.path 会让那些文件变得复杂,因为它们需要知道自己的环境。
还有一个第四个选择,就是把你常用的代码做成一个真正可以安装的包,然后把它安装到你的 Python 环境里。这样你就可以像使用其他第三方库一样,直接导入这些模块。
让我来提一个第四种选择:花点时间学习如何打包你的库,并把它安装到你的网站包里;这其实比你想象的要简单,我相信这绝对是值得的。这里有一个很好的入门指南:https://packaging.python.org/en/latest/