重用python代码的最佳实践

时间:2011-08-05 13:01:00

标签: python dry pythonpath

我已经编写了一个python库应用程序(其中包含多个* .py文件)。我的几个python项目需要重用库应用程序中的代码。重用python代码的推荐最佳做法是什么?目前我已经考虑了三个选项:

  1. 复制并粘贴。这远离最佳做法。它违反了 干的原则。(不要重复自己。)
  2. 将库应用程序的文件夹添加到环境变量PYTHONPATH:export PYTHONPATH=/path/to/library/app。然后,同一台计算机上的每个项目都可以引用库应用程序中的代码。
  3. 库应用程序的文件夹到python代码中的sys.path:sys.path.append('/path/to/library/app')
  4. 在上面的三个选项中,您更喜欢哪一个?与其他两个选项相比,它有什么优势?你还有其他更好的选择吗?非常感谢,如果具有多年python开发经验的人能够回答这个问题。

4 个答案:

答案 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上发布了一些项目,那么您还可以安装有问题的项目,并且每个潜在用户都可以更轻松地使用它们。