代码之家  ›  专栏  ›  技术社区  ›  tommy chheng

python有包/模块管理系统吗?

  •  139
  • tommy chheng  · 技术社区  · 15 年前

    python是否有一个包/模块管理系统,类似于ruby在哪里有rubygems gem install packagename ?

    Installing Python Modules ,我只看到引用 python setup.py install ,但这要求您首先找到包。

    13 回复  |  直到 6 年前
        1
  •  209
  •   Community CDub    8 年前

    最近的进展

    2014年3月 :好消息! Python 3.4 带PIP的船舶。PIP一直是Python事实上的标准包管理器。您可以安装 a package 这样地:

    pip install httpie
    

    瓦希!这是任何Python版本的最佳特性。它让每个人都能接触到社区丰富的图书馆。新来的人不再因为设置的困难而被排除在使用社区图书馆之外。

    然而 对于python的打包体验,仍然存在一些显著的挫折。累积起来,它们使python对新手非常不受欢迎。此外,长期以来的疏忽(即14年来没有与包管理器一起从Python2.0到Python3.3)对社区造成了损害。我在下面描述这两个。

    突出的挫折感

    重要的是要理解,尽管经验丰富的用户能够解决这些挫折,但它们对刚接触到Python的人来说却是一个巨大的障碍。事实上,困难和一般的用户不友好可能会阻止他们中的许多人。

    Pypi网站是反作用的

    包管理器的每种语言都有一个官方(或准官方)存储库,供社区下载和发布包。python有python包索引pypi。 https://pypi.python.org/pypi

    让我们将它的页面与RubyGems和NPM(节点包管理器)的页面进行比较。

    1. https://rubygems.org/gems/rails 包裹的rubygems页面 rails
    2. https://www.npmjs.org/package/express 包的NPM页 express
    3. https://pypi.python.org/pypi/simplejson/ 包的Pypi页 simplejson

    您将看到rubygems和npm页面都从一行描述包开始,然后是如何安装包的大型友好说明。

    同时,不幸的是,任何天真地浏览到pypi的不幸的python用户。论 https://pypi.python.org/pypi/simplejson/ 他们不会找到这样有用的指示。然而,有一个绿色的“下载”链接。遵循它并不不合理。啊哈,他们点击了!他们的浏览器下载 .tar.gz 文件。许多Windows用户甚至无法打开它,但如果他们坚持下去,最终可能会提取它,然后运行 setup.py 最终在谷歌的帮助下 setup.py install 。有些人会放弃并重新发明轮子。

    当然,所有这些都是错误的。这个 最简单的 安装软件包的方法是使用pip命令。但皮比甚至没有提到皮普。相反,它引导他们走上了一条古老而乏味的道路。

    错误:找不到vcvarsall.bat

    numpy是Python最流行的库之一。尝试用pip安装它,您会收到这个神秘的错误消息:

    错误:找不到vcvarsall.bat

    尝试修复这是有关堆栈溢出的最常见问题之一:“ error: Unable to find vcvarsall.bat

    成功的人很少。

    为了进行比较,在相同的情况下,Ruby会打印这个消息,它解释了发生了什么以及如何修复它:

    请更新您的路径以包含生成工具或从下载devkit http://rubyinstaller.org/downloads 并遵循以下说明: http://github.com/oneclick/rubyinstaller/wiki/Development-Kit

    发布包很困难

    Ruby和Nodejs拥有功能齐全的软件包管理器、gem(2007年起)和npm(2011年起),并培育了以Github为中心的共享社区。NPM品牌 publishing packages 与安装它们一样简单,它已经 64k packages . RubyGems列表 72k packages . 古老的python包索引列表 only 41k .

    历史

    在它的面前飞翔” batteries included “口号是,在2014年之前,python还没有安装包管理器。

    在PIP之前,实际上的标准是命令 easy_install . 这是可悲的不足。没有卸载程序包的命令。

    PIP是一个巨大的进步。它具有红宝石的大部分特征。不幸的是,直到最近,PIP还很难安装。事实上,这个问题仍然是关于堆栈溢出的最重要的python问题:“ How do I install pip on Windows?

        2
  •  64
  •   Thomas Bratt    12 年前

    python包索引(pypi) 似乎是标准的:

    • 安装 包装: pip install MyProject
    • 更新 一个包裹 pip install --upgrade MyProject
    • 修复版本 一个包裹的 pip install MyProject==1.0

    您可以按如下方式安装包管理器:

    curl -O http://python-distribute.org/distribute_setup.py
    python distribute_setup.py
    easy_install pip
    

    参考文献:

        3
  •  63
  •   Ignacio Vazquez-Abrams    15 年前

    为了提供对比,还有 pip .

        4
  •  21
  •   the Tin Man    10 年前

    作为一个Ruby和Perl的开发人员和学习python的人,我没有发现easy-install或pip等同于rubygems或cpan。

    当开发人员更新模块时,我倾向于让我的开发系统运行最新版本的模块,并将我的生产系统冻结为固定版本。RubyGems和CPAN都通过列出可用的模块,使查找模块变得容易,然后安装并在需要时单独或批量更新模块。

    易于安装和PIP使我通过浏览器搜索找到模块或通过其他方式了解模块后,就可以轻松安装模块,但它们不会告诉我可用的内容。我可以明确地命名要更新的模块,但是这些应用程序不会告诉我更新了什么,如果我需要的话,它们也不会批量更新所有内容。

    因此,基本的功能在pip和easy-install中是存在的,但是有一些功能缺失了,我想看到这将使它们更友好,更容易使用,并且与cpan和rubygems一样。

        5
  •  13
  •   Peter Mortensen icecrime    9 年前

    至少有两个, easy_install 及其继承人 pip .

        6
  •  11
  •   anderspitman    8 年前

    至少截至2014年底, Continuum Analytics' Anaconda python分发 conda 应考虑包管理器。它解决了人们在一次内聚性下载中遇到的大多数与python有关的严重问题(管理不同的python版本、更新python版本、包管理、虚拟环境、Windows/Mac兼容性)。

    它使您可以使用Python做几乎所有您想做的事情,而不必更改系统。我的下一个首选解决方案是pip+virtualenv,但您要么在系统python中安装virtualenv(而您的系统python可能不是您想要的版本),要么 build from source 。水蟒使整个过程成为一个按钮的点击,以及添加一堆其他功能。

        7
  •  6
  •   Kirk Strauser    15 年前

    那会是 easy_install .

        8
  •  6
  •   Chris Long user9414135    15 年前

    它被称为设置工具。使用“easy-install”命令运行它。

    您可以在以下位置找到目录: http://pypi.python.org/

        9
  •  4
  •   hansvb    11 年前

    在Windows安装时 http://chocolatey.org/ 然后

    choco install python
    

    用更新的路径打开一个新的命令窗口。下一步,做

    choco install pip
    

    之后你可以

    pip install pyside
    pip install ipython
    ...
    
        10
  •  4
  •   Community CDub    8 年前

    我也没看见 MacPorts Homebrew 在这里的其他答案中提到过,但由于我确实看到它们在堆栈溢出中的其他地方提到过,关于相关问题,我将添加我自己的0.02美元,许多人似乎都在考虑。 MacPorts 作为一个包管理器(从今天起,他们列出了16311个包/端口,2931个匹配的“python”,尽管只针对macs),同时也是一个体面的(也许更好)python包/模块的包管理器:

    问题

    "...what is the method that Mac python developers use to manage their modules?"

    答案

    斯皮皮

    "Macs (unlike Linux) don’t come with a package manager, but there are a couple of popular package managers you can install. Macports..."

    我仍在讨论是否自己使用MacPorts,但目前我正朝着这个方向倾斜。

        11
  •  3
  •   Vaulstein MUGABA    7 年前

    因为没人提到 皮彭夫 在这里,我想描述一下我的视图,为什么每个人都应该使用它来管理Python包。

    正如@colonelpanic提到的, Python Package Index 匹普 virtualenv 也。

    皮彭夫 解决了PIP的大部分问题,并提供了其他特性。

    PipeNV功能

    pipenv旨在取代pip和virtualenv,这意味着pipenv将为每个项目自动创建单独的虚拟环境,从而避免不同项目的不同python版本/包版本之间的冲突。

    • 启用真正的确定性构建,同时轻松地指定所需的内容。
    • 为锁定的依赖项生成并检查文件哈希。
    • 如果pyenv可用,则自动安装所需的pythons。
    • 通过查找pipfile自动查找项目的主目录。
    • 如果不存在pipfile,则自动生成pipfile。
    • 在标准位置自动创建virtualenv。
    • 卸载/安装程序包时自动向pipfile添加/删除程序包。
    • 自动加载.env文件(如果存在)。

    如果您以前处理过python项目,那么您将认识到这些特性使管理包变得更加容易。

    其他命令

    • check 检查安全漏洞,并断言当前环境正在满足PEP 508要求。( 我认为这是一个很好的特色,尤其是在这之后- Malicious packages on PyPi )
    • graph 将向您显示已安装依赖项的依赖关系图。

    你可以在这里了解更多- Pipenv .

    安装

    您可以找到安装文档 here

    P.S.:如果您喜欢使用python包 requests 你会很高兴知道的 皮彭夫 由同一个开发者 Kenneth Reitz

        12
  •  0
  •   gagarine Alex G    6 年前

    2019年 poetry 是您要查找的包和依赖关系管理器。

    https://github.com/sdispater/poetry#why

    它现代化,简单可靠。

        13
  •  0
  •   0x32e0edfb    6 年前

    Poetry 就是你要找的。它负责依赖关系管理、虚拟环境和运行。