【问题标题】:Maintaining a professional Python system维护专业的 Python 系统
【发布时间】:2014-11-12 08:52:10
【问题描述】:

好的,我承认这个问题对于这个论坛来说可能有点过于元,但让我描述一下情况。我有一个包含 10 个包的大型 Python 项目。我正在使用 git。提交会在我的远程服务器(teamcity)上触发测试,如果我愿意,我会在远程服务器上安装它(通过创建一个全新的 conda 环境)。这种效果很好,但不能很好地扩展,我已经阅读了关于 setuptools 的信息。

在 Java 世界中,我之前使用过 Nexus,并与 Maven 结合使用,这简直就是天堂。我希望 setuptools 能让我更接近这种情况。

所以我将我的项目分成几个项目(假设是母亲和一个孩子),因此必须在本地安装底层项目(以确保子项目可以访问它)。假设我的基础项目(母亲)是 pytools:

from setuptools import setup

setup(
    name='pytools',
    version='0.4',
    packages=['pytools'],
    description='', requires=['pandas'],
    test_suite="test.suite.suite"
)

然后我使用 python setup.py install 在本地安装它以确保孩子可以使用它。 我想这是根本性的错误。

安装后,我将鸡蛋放在 sys.path 中非常显眼的位置,我想避免弄乱 sys.path。它是如此之高,以至于在 IDE 中使用 pytools 变得很困难。

我假设我应该在只提供 pandas 的环境中开发 pytools 并且永远不会在其中安装它?那么第二个项目如何访问 pytools 呢?一种方法是将鸡蛋从 dist 文件夹(您是否在 git 中提交 dist 文件夹?)复制到任何其他项目中?或者告诉 setuptools 仓库的位置,以确保子项目可以安装 pytools?

那你怎么测试呢?服务器上的测试在运行之前构建了一个全新的环境?

在您将我指向 setuptools 的文档之前(非常感谢),您应该假设我已经阅读了它。但通常它会引发一系列全新的问题,并且它提供的惊人的力量和灵活性提供了做出一些非常糟糕的决定的可能性。因此,我向专家寻求有用的 cmets,也许您甚至愿意分享您如何在多项目、多用户环境中运行 Python。

【问题讨论】:

    标签: python setuptools


    【解决方案1】:

    Setuptools 并不是真正为生产安装东西的方法;它用于分发您的包裹。建立生产环境的最好方法是使用 virtualenv 和 pip;在 virtualenv 中本地安装你的包,使用 pip freeze 创建一个 requirements.txt 文件,然后在生产环境中使用 pip install -r requirements.txt 从该文件重建你的环境。

    【讨论】:

    • 好的,这已经很有帮助了。因此,您可以即时重新创建整个环境,并且我假设您在测试通过后将其删除。我在 conda 中操作,命令是 conda list -e > requirements.txt 和 conda create -n tmpenv --file requirements.txt。为什么要在 virtualenv 中本地安装软件包?您是否希望在 requirements.txt 中引用您的包?
    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多