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

维护专业的Python系统

维护专业的Python系统,python,setuptools,Python,Setuptools,好的,我承认这个问题对于这个论坛来说可能有点太复杂了,但让我来描述一下情况。我有一个巨大的Python项目,大约有10个包。我正在使用git。提交会在我的远程服务器(teamcity)上触发一个测试,如果我愿意,我会在远程服务器上安装它(通过创建一个全新的conda环境)。这种方法工作得很好,但不能很好地扩展,我读过关于setuptools的文章 在Java世界中,我曾经与Nexus合作过,并与Maven合作过,这简直是天堂。我希望setuptools能让我更接近这种情况 因此,我将我的项目分成

好的,我承认这个问题对于这个论坛来说可能有点太复杂了,但让我来描述一下情况。我有一个巨大的Python项目,大约有10个包。我正在使用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的文档之前(非常感谢),你应该假设我已经读过了。但它常常会引发一系列全新的问题,它所提供的惊人的力量和灵活性使人们有可能做出一些非常糟糕的决定。因此,我向专家们征求有用的意见,也许您甚至愿意分享您如何在多项目、多用户环境中运行Python。

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

好的,这已经非常有用了。因此,您可以动态地重新创建整个环境,我假设您在测试通过后删除它。我在conda中操作,命令是conda list-e>requirements.txt和conda create-ntmpenv--file requirements.txt。为什么要在virtualenv中本地安装软件包?是否希望在requirements.txt中引用包?