Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重用python代码的最佳实践_Python_Dry_Pythonpath - Fatal编程技术网

重用python代码的最佳实践

重用python代码的最佳实践,python,dry,pythonpath,Python,Dry,Pythonpath,我已经编写了一个python库应用程序(其中包含几个*.py文件)。我的几个python项目需要在库应用程序中重用代码。推荐的重用python代码的最佳实践是什么?目前我想出了三个选择: 复制和粘贴。这与最佳实践相去甚远。这违反了法律 枯燥的原则。(不要重复你自己。) 将库应用程序的文件夹添加到环境变量PYTHONPATH:export PYTHONPATH=/path/to/library/app。然后,同一台计算机上的每个项目都可以引用库应用程序中的代码 在python代码中,将库应用程序的

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

  • 复制和粘贴。这与最佳实践相去甚远。这违反了法律 枯燥的原则。(不要重复你自己。)
  • 将库应用程序的文件夹添加到环境变量PYTHONPATH:
    export PYTHONPATH=/path/to/library/app
    。然后,同一台计算机上的每个项目都可以引用库应用程序中的代码
  • 在python代码中,将库应用程序的文件夹设置为sys.path:
    sys.path.append('/path/to/library/app')

  • 在以上三个选项中,你更喜欢哪一个?与其他两个选项相比,它有什么优势?你还有其他更好的选择吗?非常感谢有多年python开发经验的人能够回答这个问题

    如果它是一个共享库,你应该将它打包并添加到站点包中,这样你就不必担心设置任何东西了。这是最好的选择


    如果您不想使用站点包,那么使用PYTHONPATH。这就是它存在的原因,也是做你想做的事情的方式


    您可能需要研究如何使用,path.append不能防止重复。它还允许您利用.pth文件

    通过
    sys.path
    向PYTHONPATH动态设置/添加内容可以获得相同的结果,但如果您选择重用新库,则会使事情变得复杂。如果您的路径发生更改,则必须更改代码,而不是环境变量,这也会导致问题。除非完全必要,否则不应动态设置python路径



    复制和粘贴不是重复使用模式。您没有重复使用您正在复制和增加维护的任何东西

    正如您自己所指出的,第一种方法很难被接受

    另外两个也有自己的问题。首先,当文件移动时,它们需要手动操作(如果将其与应用程序逻辑混合使用,则特别糟糕,即将其放入*.py文件中,而不是留给运行它的计算机),并且需要固定的安装位置(绝对路径)或至少特定的目录结构(相对路径)。依我看,只有当应用程序永远不会移动到其他地方时,这些方法才是可以接受的。一旦需要,您应该放弃并使用现有的解决方案,因为不使用它的一个原因是对小型和本地脚本的过度使用,不再适用:


    使用一个
    setup.py
    ,可以通过一个命令跨平台安装并添加到PYTHONPATH,从而使公共部分成为一个独立的库(很好!),一个完全成熟的项目。你不需要在PyPI上发布它,但是如果你将来改变主意的话,这样做会更容易。如果您这样做,并在PyPI上发布您的一些项目,您还可以让每个潜在用户更轻松地安装有问题的项目及其依赖项。

    请允许我提出第四种选择:花时间学习如何打包库并将其安装到站点包中;这比人们想象的要容易,我相信这段时间花得很好。这是一个非常好的起点:

    在您的三个选项中,PYTHONPATH是一个不错的选择。复制和粘贴显然已过时,向其他项目添加代码以修改sys.path只会污染那些了解其环境的文件


    第四个选项是,从公共代码创建一个真正的可安装包,并将其安装到Python安装中。然后,您可以像任何其他第三方安装代码一样简单地导入这些模块。

    如果您不能/不想安装到您的机器上,我还想看看virtualenv。我没有提到它,因为它在指南中有描述,但你是对的,它是不可或缺的,特别是如果你想继续在安装了它的机器上开发你的库!事实上,当你掌握了窍门后,你可以在几分钟内打包一个库。Python真的很容易做到这一点!如果我还想上传/下载/共享(google app engine?)结果包呢?我不熟悉google AppEngine,但我在回答中提到的指南解释了如何使用Python包索引共享库。