代码之家  ›  专栏  ›  技术社区  ›  AaronS

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

  •  5
  • AaronS  · 技术社区  · 16 年前

    我正在和其他一些开发人员讨论一个开源项目。我对python不熟悉,但在我看来,站点包是针对库而不是最终用户应用程序的。这是真的吗,还是站点包是安装最终用户运行的应用程序的合适位置?

    5 回复  |  直到 16 年前
        1
  •  4
  •   Carl Meyer    16 年前

    一旦您到达应用程序准备好发布的位置,就可以将它打包为您最喜欢的发行版/OS,以将库代码放入站点包中,并将可执行脚本放到系统路径上。

    在此之前(也就是说,对于所有的开发工作),不要做任何上述的事情:省去你的主要头痛和使用 zc.buildout virtualenv 使您的开发代码(如果您愿意,还包括它的依赖项)与系统的其余部分保持隔离。

        2
  •  4
  •   S.Lott    16 年前

    我们这样做。

    我们下载的大多数东西都在站点包中。他们来自 pypi 或者源伪造或者其他外部源;它们很容易重建;它们被高度重用;它们变化不大。

    我们写的东西必须在其他地方(通常在 /opt c:\opt )包含在 PYTHONPATH .

    没有 伟大的 把我们的东西放在外面的理由 site-packages .然而,我们无力的借口是我们的东西改变了很多。几乎总是如此。每次我们认为有更好的东西时都要重新安装站点包,这有点痛苦。

    由于我们测试的是工作目录或SVN签出目录,因此我们的测试环境会大量使用 Python路径 .

    开发利用 Python路径 投入生产。我们使用 setup.py 用于生产安装,但安装到 /opt 并设置 Python路径 包括 /opt/ourapp-1.1 .

        3
  •  3
  •   JimB    16 年前

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

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

        4
  •  0
  •   Seun Osewa    16 年前

    当然,网站包是为图书馆提供的。

    一种混合方法可能有效:您可以在站点包中安装应用程序所需的库,然后在其他地方安装主模块。

        5
  •  0
  •   iny    16 年前

    如果您可以将应用程序的一部分转换为库并提供API,那么站点包就是一个很好的地方。实际上,这就是有多少python应用程序执行此操作。

    但从用户或管理员的角度来看,这并不是问题所在。问题是我们如何管理安装的内容。安装之后,如何升级和卸载它?

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

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

    第三种方法是使用类似easy-install的东西来安装这样的东西,例如用户到主目录。

    所以

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