来自Node.js + npm背景,尝试理解与Python包管理相关的所有事情真的很噩梦。经过几个小时的研究,我偶然发现了所有这些关键词:
有人可以帮我解读这些条款并将它们置于历史背景中吗?例如,“distutils是第一个包管理器,但它被Y取代,因为Z”。
我非常喜欢Python(语言),但对于过去几年一直在使用惊人的npm的人来说,包管理似乎是一个真正的噩梦。
答案 0 :(得分:20)
套餐类型
Egg vs Wheel vs vs Both。这两者的含义都不是python包可以从它的“源”安装而不是打包成鸡蛋或轮子。
包装工具
有几个库提供用于打包python应用程序的实用程序,包括distutils和setuptools。此处已有excellent post。
easy_install
setuptools的一部分,允许构建和安装python包。经常气馁赞成Pip。旨在使包装的安装变得简单,做下载的工作并将它们移动到正确的位置(因此得名)。
Pip
python包的包管理器,以及easy_install的替代品! See here出于某些原因,人们更喜欢easy_install。可以做一些巧妙的事情,比如直接从git存储库安装包,或者在目标机器上编译C扩展。后者对于它是否可取是值得商榷的,但是如果你想要的话,这是一个很好的功能。
PyPI
python包索引,默认情况下easy_install和Pip搜索可用包。基本上是社区接受的巨大模块在线存储库。
virtualenv
一种攻击环境变量以“隔离”python安装及其相关模块的方法。喜欢Pip,因为Ian Bicking都写了它们。基本上,你使用pip来安装virtualenv系统范围,然后允许你创建python虚拟环境,每个环境都有自己的python,pip和各种模块的副本。这让你有多个版本的python或安装一个模块只是为了测试,而不会破坏你的系统范围的python安装。
virtualenvwrapper
一个非常方便的shell脚本,可以更轻松地创建和拆除虚拟环境。
site-packages
支持将python模块安装到其中的位置之一。住在像/usr/lib/pythonX.X/site-packages
这样的地方。还有其他受支持的位置,例如dist-packages
或user specific locations.
这对您来说意味着什么?
我建议你不要关注easy_install,只需使用pip。请也总是使用virtualenv。通常,您应该在工作站上安装系统范围的唯一python模块是pip和virtualenv。我完全忽略了鸡蛋和轮子,但如果你打算专业地分发包或者在PyPI上托管它们,你可能想要调查它们。另外,如果要创建python包,则需要learn to write a setup script, with setuptools。我的建议是永远不要使用distutils。
更多阅读
{python.org上的A page关于包装的内容涵盖了很多这些主题
Python packaging is a nightmare
A great post违反最常见的建议,包括我的建议!
答案 1 :(得分:3)
您列出的选项中有一些混合:
site-packages - python包/ lib所在的标准位置
pypi - 是一个存储库
easy_install - 可在setuptools包中找到
答案 2 :(得分:0)
截至2018年12月,分发python软件的规范方法如下:
setuptools
作为分发库wheel
作为分发格式 $ python setup.py bdist_wheel
一旦有了正确的setup.py
文件,就可以构建可以分发的源tarball
$ python setup.py sdist
sdist命令在源树的dist目录下创建一个tarball。压缩包包含源树中所有的Python模块
确保已安装车轮以便安装bdist_wheel
pip install wheel