维护专业的Python系统

时间:2014-11-12 08:52:10

标签: python setuptools

好的,我承认这个问题对于这个论坛来说可能有点过分,但让我来描述一下情况。我有一个包含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变得很难。

我认为我应该在只提供熊猫的环境中开发pytools并且永远不会在那里安装它?那么第二个项目如何访问pytools呢?一条路线是将蛋从dist文件夹复制(你在git中提交dist文件夹吗?)到任何其他项目中?或者告诉setuptools存储库的位置,以确保子项目可以安装pytools?

你如何测试呢?服务器上的测试在运行之前构建一个全新的环境?

在您开始指向setuptools的文档之前(非常感谢)您应该假设我已经阅读过它。但通常它会打开一整套新的问题,它提供的惊人的力量和灵活性提供了做出一些非常糟糕的决定的可能性。因此,我请专家们提供有用的评论,也许您甚至愿意分享如何在多项目,多用户环境中运行Python。

1 个答案:

答案 0 :(得分:1)

Setuptools实际上并不是安装生产用品的方法;它是用于分发您的包裹的。设置生产环境的最佳方法是使用virtualenv和pip;在virtualenv中本地安装软件包,使用pip freeze创建一个requirements.txt文件,然后在生产中执行pip install -r requirements.txt以从该文件重建您的环境。