我已经编写了一个python库应用程序(其中包含多个* .py文件)。我的几个python项目需要重用库应用程序中的代码。重用python代码的推荐最佳做法是什么?目前我已经考虑了三个选项:
export PYTHONPATH=/path/to/library/app
。然后,同一台计算机上的每个项目都可以引用库应用程序中的代码。sys.path.append('/path/to/library/app')
在上面的三个选项中,您更喜欢哪一个?与其他两个选项相比,它有什么优势?你还有其他更好的选择吗?非常感谢,如果具有多年python开发经验的人能够回答这个问题。
答案 0 :(得分:43)
请允许我提出第四种选择:花时间学习如何打包您的库并将其安装在您的站点包中;它比人们想象的要容易,而且我确信它的时间花得很好。这是一个非常好的起点:https://packaging.python.org/en/latest/
答案 1 :(得分:5)
在你的三个选择中,PYTHONPATH是要走的路。复制&粘贴很明显,并且将代码添加到其他项目以修改sys.path只会污染那些知道其环境的文件。
第四个选项是,从公共代码创建一个真正的可安装包,并将其安装到Python安装中。然后,您可以像任何其他第三方安装代码一样导入这些模块。
答案 2 :(得分:3)
如果是共享库,您应该将其打包并将其添加到site-packages,然后您不必担心设置任何内容。这是最好的选择。
如果您不想使用site-packages,请使用PYTHONPATH。它存在的原因,以及 的方式来做你想做的事。
您可能希望查看使用site.addsitedir,path.append不会阻止重复。它还允许您利用.pth文件。
通过sys.path
动态设置/添加内容到PYTHONPATH可以获得相同的结果,但如果您选择重新使用新库,则会使事情变得复杂。如果路径发生变化,也会导致问题,您必须更改代码与环境变量。除非完全有必要,否则不应动态设置python路径。
复制&粘贴不是重复使用模式。您不会重复使用任何复制和增加维护的内容。
答案 3 :(得分:2)
第一种方式是,正如您所指出的那样,几乎不可接受,因为它有countless well-known problems。
另外两个有自己的问题。对于初学者来说,他们需要在文件移动时进行手动工作(如果你将它与应用程序逻辑混合在一起则特别糟糕,即将其放在* .py文件中而不是将其留在运行它的计算机上)并且需要固定的安装位置(绝对路径) )或至少某个目录结构(相对路径)。恕我直言,这些方式只有在应用程序不会移动到其他地方时才可以接受。一旦需要,您应该放弃并使用现有的解决方案作为不使用它的一个原因,对于小型和本地脚本来说是过度杀戮,不再适用:
制作公共部分,你显然已经将它视为一个独立的库(好!),一个完全成熟的项目,其中setup.py
允许安装和添加到PYTHONPATH中使用单个命令的跨平台方式。您不需要在PyPI上实际发布它,但如果您将来改变主意,它会使这样做更容易。如果您这样做并且还在PyPI上发布了一些项目,那么您还可以安装有问题的项目,并且每个潜在用户都可以更轻松地使用它们。