Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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 - Fatal编程技术网

Python 站点包适合应用程序还是仅适合库?

Python 站点包适合应用程序还是仅适合库?,python,Python,我正在和其他一些开发人员讨论一个开源项目。我是python新手,但在我看来,站点包是为库而不是最终用户应用程序设计的。这是真的还是站点软件包是安装由最终用户运行的应用程序的合适位置?最终用户运行的程序通常位于其路径中的某个位置,大部分代码位于模块目录中,而模块目录通常位于站点软件包中 许多python程序在路径中都有一个小脚本,该脚本导入模块并调用“main”方法来运行程序。这允许程序员进行一些前期检查,如果需要,还可以修改sys.path以找到所需的模块。这还可以加快较大程序的加载时间,因为只

我正在和其他一些开发人员讨论一个开源项目。我是python新手,但在我看来,站点包是为库而不是最终用户应用程序设计的。这是真的还是站点软件包是安装由最终用户运行的应用程序的合适位置?

最终用户运行的程序通常位于其路径中的某个位置,大部分代码位于模块目录中,而模块目录通常位于站点软件包中

许多python程序在路径中都有一个小脚本,该脚本导入模块并调用“main”方法来运行程序。这允许程序员进行一些前期检查,如果需要,还可以修改sys.path以找到所需的模块。这还可以加快较大程序的加载时间,因为只有导入的文件才会从字节码运行。

我们这样做

我们下载的大部分内容都在网站包中。它们来自
pypi
或sourceforge或其他外部来源;它们很容易重建;它们被高度重用;它们变化不大

我们必须写的东西在其他位置(通常在
/opt
c:\opt
下),并且包含在
PYTHONPATH

没有什么理由不让我们的东西出现在
网站包中。然而,我们无力的借口是我们的东西变化很大。几乎总是这样。每当我们认为我们有更好的东西时,重新安装站点软件包是有点痛苦的

由于我们在工作目录或SVN签出目录之外进行测试,我们的测试环境大量使用
PYTHONPATH


PYTHONPATH
的开发使用逐渐进入生产阶段。我们使用
setup.py
进行生产安装,但是安装到
/opt
下的备用主页,并将
PYTHONPATH
设置为包含
/opt/ourapp-1.1
站点包,这是为库准备的


混合方法可能会起作用:您可以在站点软件包中安装应用程序所需的库,然后在其他地方安装主模块。

如果您可以将应用程序的一部分转换为库并提供API,那么站点软件包是安装它的好地方。这实际上是有多少python应用程序可以做到这一点

但从用户或管理员的角度来看,这实际上并不是问题所在。问题是我们如何管理已安装的东西。安装后,如何升级和卸载

我用软呢帽。如果我使用它附带的python,我不喜欢在RPM系统之外的站点包中安装东西。在某些情况下,我自己构建rpm来安装它

如果我在RPM之外构建自己的python,那么我自然希望使用python的机制来管理它

第三种方法是使用easy_install之类的东西来安装,例如用户到主目录

所以

  • 允许对分发进行打包
  • 允许选择要使用的python
  • 允许在您没有站点包权限的情况下使用由发行版安装的python
  • 允许在可以使用站点包的发行版之外使用安装的python

一旦您的应用程序已准备好分发,请将其打包为您喜爱的分发版/操作系统,将库代码放入站点包中,并将可执行脚本放入系统路径中


在那之前(即对于所有开发工作),不要做上面的任何一项:省去你自己的麻烦,使用或保持你的开发代码(如果你喜欢,也包括它的依赖项)与系统的其他部分隔离。

听起来你们真的可以从virtualenv+pip(或zc.buildout)中获益.我们没有任何配置问题--virtualenv没有增加多少价值。我们使用某种类型的虚拟机(可能是VMWare--由其他人负责)来托管各种服务器以进行测试、QA、生产等。在一台机器上使用许多虚拟机似乎比在一台机器上使用virtualenv更简单。当然,如果您有硬件为您所处理的每个项目运行单独的虚拟机,那么Python级别的虚拟化就没有必要了。但是,您是如何进行开发的?是否每个开发人员都为每个项目运行本地VMWare实例?它是Django。我们在Windows上开发,但在VM的Red Hat中部署。在一些地方(3或4),我们需要知道平台是否为“win32”,然后只确定是否使用带有subprocess.Popen.Great的shell即可解决所有问题。谢谢大多数答案都是这个问题的变体,但我相信这个答案的第一段最简洁地回答了这个问题。对于这个应用程序,代码已经被分发了,所以尝试zc.buildout或virtualenv可能已经过去了,但我会在将来记住它们。