精华内容
下载资源
问答
  • http://ju.outofmemory.cn/entry/106476 andhttp://blog.csdn.net/xluren/article/details/41114779目录1 前言2 获取pip2.1 脚本安装pip2.2 使用包管理软件安装2.3 更新pip3 pip基本使用3.1 安装PyPI软件3.2 查看...

    原文参考:http://ju.outofmemory.cn/entry/106476 and http://blog.csdn.net/xluren/article/details/41114779

    目录

    1 前言

    2 获取pip

    2.1 脚本安装pip

    2.2 使用包管理软件安装

    2.3 更新pip

    3 pip基本使用

    3.1 安装PyPI软件

    3.2 查看具体安装文件

    3.3 查看哪些软件需要更新

    3.4 升级软件包

    3.5 卸载软件包

    4 pip简明手册

    4.1 安装具体版本软件

    4.2 Requirements文件安装依赖软件

    4.3 列出软件包清单

    4.4 查看软件包信息

    4.5 搜寻

    4.6 配置文件

    4.7 命令行自动补全

    5 包制作

    1 前言

    pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具。

    GitHub: https://github.com/pypa/pip

    Doc: https://pip.pypa.io/en/latest/

    2 获取pip

    2.1 脚本安装pip

    curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py

    python get-pip.py

    2.2 使用包管理软件安装

    sudo yum install python-pip

    sudo apt-get install python-pip

    2.3 更新pip

    pip install -U pip

    3 pip基本使用

    3.1 安装PyPI软件

    pip install SomePackage

    [...]

    Successfully installed SomePackage

    3.2 查看具体安装文件

    pip show --files SomePackage

    Name: SomePackage

    Version: 1.0

    Location: /my/env/lib/pythonx.x/site-packages

    Files:

    ../somepackage/__init__.py

    [...]

    3.3 查看哪些软件需要更新

    pip list --outdated

    SomePackage (Current: 1.0 Latest: 2.0)

    3.4 升级软件包

    pip install --upgrade SomePackage

    [...]

    Found existing installation: SomePackage 1.0

    Uninstalling SomePackage:

    Successfully uninstalled SomePackage

    Running setup.py install for SomePackage

    Successfully installed SomePackage

    3.5 卸载软件包

    pip uninstall SomePackage

    Uninstalling SomePackage:

    /my/env/lib/pythonx.x/site-packages/somepackage

    Proceed (y/n)? y

    Successfully uninstalled SomePackage

    4 pip简明手册

    4.1 安装具体版本软件

    pip install SomePackage # latest version

    pip install SomePackage==1.0.4 # specific version

    pip install 'SomePackage>=1.0.4' # minimum version

    4.2 Requirements文件安装依赖软件

    Requirements文件 一般记录的是依赖软件列表,通过pip可以一次性安装依赖软件包:

    pip freeze > requirements.txt

    pip install -r requirements.txt

    4.3 列出软件包清单

    pip list

    pip list --outdated

    ipython (Current: 1.2.0 Latest: 2.3.0)

    4.4 查看软件包信息

    pip show pip

    ---

    Name: pip

    Version: 1.4.1

    Location: /Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg

    Requires:

    pip show pyopencl

    ---

    Name: pyopencl

    Version: 2014.1

    Location: /Library/Python/2.7/site-packages

    Requires: pytools, pytest, decorator

    4.5 搜寻

    pip search pycuda

    pycuda - Python wrapper for Nvidia CUDA

    pyfft - FFT library for PyCuda and PyOpenCL

    cudatree - Random Forests for the GPU using PyCUDA

    reikna - GPGPU algorithms for PyCUDA and PyOpenCL

    compyte - A common set of compute primitives for PyCUDA and PyOpenCL (to be created)

    4.6 配置文件

    配置文件: $HOME/.pip/pip.conf, 举例:

    [global]

    timeout = 60

    index-url = http://download.zope.org/ppix

    [install]

    ignore-installed = true

    no-dependencies = yes

    4.7 命令行自动补全

    对于bash:

    pip completion --bash >> ~/.profile

    对于zsh:

    pip completion --zsh >> ~/.zprofile

    加载此配置文件后,则pip命令支持自动补全功能.

    5 包制作

    5.1 编写setup.py文件

    一个简单的包制作,只需要setup.py文件 + 需要打包的源文件

    假设你要分发一个叫color的模块,文件名color.py,那么setup.py内容如下:

    from distutils.core import setup

    setup(name='color',

    version='1.0',

    py_modules=['color'],

    )

    5.2 制作zip安装包

    运行python setup.py sdist为模块创建一个源码包

    running bdist_wininst

    running build

    running build_py

    creating build

    creating build\lib

    copying color.py -> build\lib

    installing to build\bdist.win32\wininst

    running install_lib

    creating build\bdist.win32

    creating build\bdist.win32\wininst

    creating build\bdist.win32\wininst\PURELIB

    copying build\lib\color.py -> build\bdist.win32\wininst\PURELIB

    running install_egg_info

    Writing build\bdist.win32\wininst\PURELIB\color-1.0-py2.7.egg-info

    creating 'c:\users\admin\appdata\local\temp\tmpb9ztnn.zip' and adding '.' to it

    adding 'PURELIB\color-1.0-py2.7.egg-info'

    adding 'PURELIB\color.py'

    removing 'build\bdist.win32\wininst' (and everything under it)

    在当前目录下,会创建dist目录,里面有个文件名为color-1.0.tar.gz,这个就是可以分发的包。使用者拿到这个包后,解压,到color-1.0目录下执行:python setup.py install,那么,color.py就会被拷贝到python类路径下,可以被导入使用。

    running install

    running build

    running build_py

    creating build

    creating build\lib

    copying color.py -> build\lib

    running install_lib

    byte-compiling C:\Python27\Lib\site-packages\color.py to color.pyc

    running install_egg_info

    Removing C:\Python27\Lib\site-packages\color-1.0-py2.7.egg-info

    Writing C:\Python27\Lib\site-packages\color-1.0-py2.7.egg-info

    5.3 制作Windows下的exe安装文件,Linux下的rpm文件。

    对于Windows,可以执行python setup.py bdist_wininst生成一个exe文件;若要生成RPM包,执行python setup.py bdist_rpm,但系统必须有rpm命令的支持。可以运行下面的命令查看所有格式的支持:

    root@network:/kong/setup# python setup.py bdist --help-formats

    List of available distribution formats:

    --formats=rpm RPM distribution

    --formats=gztar gzip'ed tar file

    --formats=bztar bzip2'ed tar file

    --formats=ztar compressed tar file

    --formats=tar tar file

    --formats=wininst Windows executable installer

    --formats=zip ZIP file

    --formats=msi Microsoft Installer

    5.4 setup函数还有一些参数:

    1、packages

    告诉Distutils需要处理那些包(包含__init__.py的文件夹)

    2、package_dir

    告诉Distutils哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {'': 'lib'},表示“root package”中的模块都在lib目录中。

    3、ext_modules

    是一个包含Extension实例的列表,Extension的定义也有一些参数。

    4、ext_package

    定义extension的相对路径

    5、requires

    定义依赖哪些模块

    6、provides

    定义可以为哪些模块提供依赖

    7、scripts

    指定python源码文件,可以从命令行执行。在安装时指定--install-script

    8、package_data

    通常包含与包实现相关的一些数据文件或类似于readme的文件。如果没有提供模板,会被添加到MANIFEST文件中。

    9、data_files

    指定其他的一些文件(如配置文件)

    setup(...,

    data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),

    ('config', ['cfg/data.cfg']),

    ('/etc/init.d', ['init-script'])]

    )

    规定了哪些文件被安装到哪些目录中。如果目录名是相对路径,则是相对于sys.prefix或sys.exec_prefix的路径。如果没有提供模板,会被添加到MANIFEST文件中。

    执行sdist命令时,默认会打包哪些东西呢?

    所有由py_modules或packages指定的源码文件

    所有由ext_modules或libraries指定的C源码文件

    由scripts指定的脚本文件

    类似于test/test*.py的文件

    README.txt或README,setup.py,setup.cfg

    所有package_data或data_files指定的文件

    还有一种方式是写一个manifest template,名为MANIFEST.in,定义如何生成MANIFEST文件,内容就是需要包含在分发包中的文件。一个MANIFEST.in文件如下:

    include *.txt

    recursive-include examples *.txt *.py

    prune examples/sample?/build

    setup.cfg

    setup.cfg提供一种方式,可以让包的开发者提供命令的默认选项,同时为用户提供修改的机会。对setup.cfg的解析,是在setup.py之后,在命令行执行前。

    setup.cfg文件的形式类似于

    [command]

    option=value

    ...

    其中,command是Distutils的命令参数,option是参数选项,可以通过python setup.py --help build_ext方式获取。

    需要注意的是,比如一个选项是--foo-bar,在setup.cfg中必须改成foo_bar的格式

    符合Distutils2的setup.cfg有些不同。包含一些sections:

    1、global

    定义Distutils2的全局选项,可能包含commands,compilers,setup_hook(定义脚本,在setup.cfg被读取后执行,可以修改setup.cfg的配置)

    2、metadata

    3、files

    packages_root:根目录

    packages

    modules

    scripts

    extra_files

    4、command sections

    Setuptools

    上面的setup.py和setup.cfg都是遵循python标准库中的Distutils,而setuptools工具针对Python官方的distutils做了很多针对性的功能增强,比如依赖检查,动态扩展等。很多高级功能我就不详述了,自己也没有用过,等用的时候再作补充。

    一个典型的遵循setuptools的脚本:

    from setuptools import setup, find_packages

    setup(

    name = "HelloWorld",

    version = "0.1",

    packages = find_packages(),

    scripts = ['say_hello.py'],

    # Project uses reStructuredText, so ensure that the docutils get

    # installed or upgraded on the target machine

    install_requires = ['docutils>=0.3'],

    package_data = {

    # If any package contains *.txt or *.rst files, include them:

    '': ['*.txt', '*.rst'],

    # And include any *.msg files found in the 'hello' package, too:

    'hello': ['*.msg'],

    },

    # metadata for upload to PyPI

    author = "Me",

    author_email = "me@example.com",

    description = "This is an Example Package",

    license = "PSF",

    keywords = "hello world example examples",

    url = "http://example.com/HelloWorld/", # project home page, if any

    # could also include long_description, download_url, classifiers, etc.

    )

    如何让一个egg可被执行?

    setup(

    # other arguments here...

    entry_points = {

    'setuptools.installation': [

    'eggsecutable = my_package.some_module:main_func',

    ]

    }

    )

    如何定义一个可选特性?

    setup(

    name="Project-A",

    ...

    extras_require = {

    'PDF': ["ReportLab>=1.2", "RXP"],

    'reST': ["docutils>=0.3"],

    }

    )

    特性如何使用呢?需要与entry points结合使用:

    setup(

    name="Project-A",

    ...

    entry_points = {

    'console_scripts': [

    'rst2pdf = project_a.tools.pdfgen [PDF]',

    'rst2html = project_a.tools.htmlgen',

    # more script entry points ...

    ],

    }

    )

    或者被其他project依赖:install_requires = ["Project-A[PDF]"]

    插件式开发

    我想大家最熟悉的就是这个特性了吧。比如一个博客系统想用不同的插件支持不同的语言输出格式,那么就可以定义一个“entry point group”,不同的插件就可以注册“entry point”,插件注册的示例:

    setup(

    # ...

    entry_points = {'blogtool.parsers': ['.rst = some_module:a_func']}

    )

    # 或者

    setup(

    # ...

    entry_points = """

    [blogtool.parsers]

    .rst = some.nested.module:SomeClass.some_classmethod [reST]

    """,

    extras_require = dict(reST = "Docutils>=0.3.5")

    )

    Setuptools中的dependency_links

    Setuptools有一个功能叫做 dependency_links

    from setuptools import setup

    setup(

    # ...

    dependency_links = [

    "http://packages.example.com/snapshots/",

    "http://example2.com/p/bar-1.0.tar.gz",

    ],

    )

    这一功能除去了依赖的抽象特性,直接把依赖的获取url标在了setup.py里。就像在Go语言中修改依赖包一样,我们只需要修改依赖链中每个包的 dependency_links 。

    管理依赖

    我们写依赖声明的时候需要在 setup.py 中写好抽象依赖(install_requires),在 requirements.txt 中写好具体的依赖,但是我们并不想维护两份依赖文件,这样会让我们很难做好同步。 requirements.txt 可以更好地处理这种情况,我们可以在有 setup.py 的目录里写下一个这样的 requirements.txt

    --index https://pypi.python.org/simple/

    -e .

    这样 pip install -r requirements.txt 可以照常工作,它会先安装该文件路径下的包,然后继续开始解析抽象依赖,结合 --index 选项后转换为具体依赖然后再安装他们。

    这个办法可以让我们解决一种类似这样的情形:比如你有两个或两个以上的包在一起开发但是是分开发行的,或者说你有一个尚未发布的包并把它分成了几个部分。如果你的顶层的包 依然仅仅按照“名字”来依赖的话,我们依然可以使用 requirements.txt 来安装开发版本的依赖包:

    --index https://pypi.python.org/simple/

    -e https://github.com/foo/bar.git#egg=bar

    -e .

    这会首先从 https://github.com/foo/bar.git 来安装包 bar , 然后进行到第二行 -e . ,开始安装 setup 中的抽象依赖,但是包 bar 已经安装过了, 所以 pip 会跳过安装。

    Differences between distribute, distutils, setuptools and distutils2

    Distutils is the standard tool used for packaging. It works rather well for simple needs, but is limited and not trivial to extend.

    Setuptools is a project born from the desire to fill missing distutils functionality and explore new directions. In some subcommunities, it’s a de facto standard. It uses monkey-patching and magic that is frowned upon by Python core developers.

    Distribute is a fork of Setuptools that was started by developers feeling that its development pace was too slow and that it was not possible to evolve it. Its development was considerably slowed when distutils2 was started by the same group. 2013-August update: distribute is merged back into setuptools and discontinued.

    Distutils2 is a new distutils library, started as a fork of the distutils codebase, with good ideas taken from setup tools (of which some were thoroughly discussed in PEPs), and a basic installer inspired by pip. The actual name you use to import Distutils2 is packaging in the Python 3.3+ standard library, or distutils2 in 2.4+ and 3.1–3.2. (A backport will be available soon.) Distutils2 did not make the Python 3.3 release, and it was put on hold.

    PBR

    pbr是setuptools的辅助工具,最初是为OpenStack开发(https://launchpad.net/pbr),基于d2to1。

    A library for managing setuptools packaging needs in a consistent manner.

    pbr会读取和过滤setup.cfg中的数据,然后将解析后的数据提供给setup.py作为参数。包含如下功能:

    1、从git中获取Version、AUTHORS and ChangeLog信息

    2、Sphinx Autodoc。pbr会扫描project,找到所有模块,生成stub files

    3、Requirements。pbr会读取requirements.txt,生成setup函数需要的install_requires/tests_require/dependency_links

    这里需要注意,在requirements.txt文件的头部可以使用:--index https://pypi.python.org/simple/,这一行把一个抽象的依赖声明如 requests==1.2.0 转变为一个具体的依赖声明 requests 1.2.0 from pypi.python.org/simple/

    4、long_description。从README.rst, README.txt or README file中生成long_description参数

    使用pbr很简单:

    fromsetuptools importsetup

    setup(

    setup_requires=['pbr'],

    pbr=True,

    )

    使用pbr时,setup.cfg中有一些配置。在[files]中,有三个key:

    packages:指定需要包含的包,行为类似于setuptools.find_packages

    namespace_packages:指定namespace packages

    data_files: 指定目的目录和源文件路径,一个示例:

    [files]

    data_files =

    etc/pbr =etc/pbr/*

    etc/neutron =

    etc/api-paste.ini

    etc/dhcp-agent.ini

    etc/init.d = neutron.init

    [entry_points]段跟setuptools的方式相同。

    Babel

    A collection of tools for internationalizing Python applications

    Babel是 Python 的一个国际化工具包,提供了对distutils或setuptools的支持,包含一些命令。

    1、compile_catalog

    类似于msgfmt工具,takes a message catalog from a PO file and compiles it to a binary MO file.

    $ ./setup.py compile_catalog --directory foobar/locale --locale pt_BR

    running compile_catalog

    compiling catalog to foobar/locale/pt_BR/LC_MESSAGES/messages.mo

    2、extract_messages

    类似于xgettext,it can extract localizable messages from a variety of difference source files, and generate a PO (portable object) template file from the collected messages.

    $ ./setup.py extract_messages --output-file foobar/locale/messages.pot

    running extract_messages

    extracting messages fromfoobar/__init__.py

    extracting messages fromfoobar/core.py

    ...

    writing PO templatefile to foobar/locale/messages.pot

    3、update_catalog

    类似于msgmerge,it updates an existing translations catalog based on a PO template file (POT).

    setup.py和pip

    表面上,python setup.py install和pip install都是用来安装python包的,实际上,pip提供了更多的特性,更易于使用。体现在以下几个方面:

    pip会自动下载依赖,而如果使用setup.py,则需要手动搜索和下载;

    pip会自动管理包的信息,使卸载/更新更加方便和容易,使用pip uninstall即可。而使用setup.py,必须手动删除,有时容易出错。

    pip提供了对virtualenv更好的整合。

    展开全文
  • 常见的包管理工具及关系setuptools -->distributeeasy_install-->pip1、distributedistribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容易的打包和分发包,特别是对其他的包依赖的包...

    常见的包管理工具及关系

    setuptools -->distribute

    easy_install-->pip

    1、distribute

    distribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容易的打包和分发包,特别是对其他的包有依赖的包。distribute被创建是因为setuptools包不再维护了。

    主页:https://pypi.python.org/pypi/distribute

    安装及使用

    wget https://pypi.python.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip#md5=c6c59594a7b180af57af8a0cc0cf5b4a

    unzip distribute-0.7.3.zip

    cd distribute-0.7.3python setup.py install

    View Code

    2、pip

    pip是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。pip 是对easy_install的取代,提供了和easy_install相同的查找包的功能,因此可以使用easy_install安装的包也同样可以使用pip进行安装。

    注:pip的安装需要setuptools或者distribute,如果你使用的是Python 3.x那么就只能使用distribute因为Python3.x不支持setuptools。

    主页:https://pypi.python.org/pypi/pip

    安装及使用

    setuptools安装

    wget https://pypi.python.org/packages/source/s/setuptools/setuptools-20.9.0.tar.gz#md5=e5f4d80fcb68bcac179b327bf1791dec

    tar -zxf setuptools-20.9.0.tar.gz

    cd setuptools-20.9.0

    python setup.py install

    cd ..

    wget https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#md5=3823d2343d9f3aaab21cf9c917710196

    tar -zxf pip-7.1.2.tar.gz

    cd pip-7.1.2python setup.py build&& python setup.py install

    View Code

    展开全文
  • 在Python环境中已经很多成熟的,可以通过安装这些来扩展我们的程序。例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的,然后进行安装。PyPI ( Python Package Index)是获得第三方 Python ...

    在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序。

    例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的包,然后进行安装。PyPI ( Python Package Index)是获得第三方 Python 软件包以补充标准库的一个站点。

    在安装Python包的过程中,经常涉及到distutils、setuptools、distribute、setup.py、easy_install、easy_install和pip等等。

    突然对Python的包管理凌乱了,这些工具关系是什么,应该怎么去选择使用?

    下面就简单介绍下Python包管理相关的一些内容。

    Python包管理工具

    这么多的Python包管理工具,刚开始接触Python时会有点不知如何选择。其实,当查过Python的官方文档之后,慢慢就理清了这些工具之间的关系了,也就没有这么混乱了。

    下面就分别对Python中的包管理工具进行简单的介绍。

    distutils

    distutils 是 python 标准库的一部分,这个库的目的是为开发者提供一种方便的打包方式, 同时为使用者提供方便的安装方式。

    我们经常使用的setup.py就是基于distutils实现的,然后通过setup.py就可以进行打包或者安装了。

    看一个简单的例子,找一个目录创建三个文件foo.py、bar.py和setup.py,其中setup.py的内容如下:

    from distutils.core import setup

    setup(

    name='fooBar',

    version='1.0',

    author='Will',

    author_email='wilber@sh.com',

    url='http://www.cnblogs.com/wilber2013/',

    py_modules=['foo', 'bar'],

    )

    然后,在该目录中运行 python setup.py sdist ,会得到以下输出,同时生成了一个"fooBar-1.0.zip"包。

    使用者就可以解压缩这个包然后执行 python setup.py install进行安装,然后就可以使用foo、bar这两个模块了:

    关于更过如何编写setup.py的内容,请自行参阅Python官方文档中的setupscript部分。

    setuptools 和 distribute

    setuptools 是对 distutils 的增强,尤其是引入了包依赖管理。我们可以通过ez_setup.py来安装setuptools。

    至于distribute,它是setuptools的一个分支版本。分支的原因是有一部分开发者认为 setuptools 开发太慢。但现在,distribute 又合并回了 setuptools 中,所以可以认为它们是同一个东西。

    前面看到setup.py可以创建一个压缩包,而setuptools使用了一种新的文件格式(.egg),可以为Python包创建 egg文件。setuptools 可以识别.egg文件,并解析、安装它

    easy_install

    当安装好setuptools/distribute之后,我们就可以直接使用easy_install这个工具了:

    从PyPI上安装一个包:当使用 easy_install package 命令后,easy_install 可以自动从 PyPI 上下载相关的包,并完成安装,升级

    下载一个包安装:通过 easy_install package.tgz 命令可以安装一个已经下载的包

    安装egg文件:通过 easy_install package.egg 可以安装一个egg格式的文件

    通过 easy_install --help 命令可以获取该命令相关的帮助提示:

    根据上面的分析,可以看到setuptools/distribute和easy_install之间的关系:

    setuptools/distribute 都扩展了 distutils,提供了更多的功能

    easy_install是基于setuptools/distribute的一个工具,方便了包的安装和省级

    pip

    pip是目前最流行的Python包管理工具,它被当作easy_install的替代品,但是仍有大量的功能建立在setuptools之上。

    easy_install 有很多不足:安装事务是非原子操作,只支持 svn,没有提供卸载命令, 安装一系列包时需要写脚本。pip 解决了以上问题,已经成为新的事实标准。

    pip的使用非常简单,并支持从任意能够通过 VCS 或浏览器访问到的地址安装 Python 包:

    安装:  pip install SomePackage

    卸载:  pip uninstall SomePackage

    文章的下面部分就重点介绍一下pip相关的内容。

    使用pip

    在大家使用Python中,推荐使用pip进行Python包管理,pip的安装和使用都比较方便。

    pip安装

    pip的安装有两种常用的方式:

    下载get-pip.py文件,然后执行 python get-pip.py 进行安装(如果没有安装setuptools,那么get-pip.py会帮忙安装)

    现在pip源码包,然后通过setup.py进行安装

    pip常用命令

    对于pip,最常用的肯定还是 pip --help ,通过帮助文档,就可以大概知道如何使用命令和参数。

    pip常用命令集合:

    使用

    命令

    从PyPI安装软件包

    pip install SomePackage

    卸载软件包

    pip uninstall SomePackage

    查看以安装软件包

    pip list

    查看可升级软件包

    pip list --outdated

    升级软件包

    pip install --upgrade SomePackage

    查看软件包安装了哪些文件及路径等信息

    pip show --files SomePackage

    安装软件包的指定版本号

    pip install SomePackage

    # latest version

    pip install SomePackage==1.0.4

    # specific version

    pip install 'SomePackage>=1.0.4'

    # minimum version

    根据依赖文件安装软件包

    pip freeze > requirements.txt

    # 使用pip导出依赖文件列表

    pip install -r requirements.txt

    # 根据依赖文件列表,自动安装对应的软件包

    总结

    本文介绍了Python的各个包管理工具之间的关系,相信通过这篇文章的介绍,就不会再对distutils、setuptools、distribute、setup.py、easy_install、easy_install和pip等等名词感觉混乱了。

    大致了解这些Python包管理工具后,大家应该也清楚了怎么选择和使用。

    本文没有涉及如何制作并发布一个Python包,感兴趣的同学可以去Python官网上查查。

    展开全文
  • pipenv 是什么pipenv 是 python 官方推荐的包管理工具,集成了 virtualenv、pyenv 和 pip 三者的功能于一身,类似于 php 中的 composer。我们知道,为了方便管理 python 的虚拟环境和库,通常使用较多的是 ...

    pipenv 是什么

    pipenv 是 python 官方推荐的包管理工具,集成了 virtualenv、pyenv 和 pip 三者的功能于一身,类似于 php 中的 composer。

    我们知道,为了方便管理 python 的虚拟环境和库,通常使用较多的是 virtualenv 、pyenv 和 pip,但是他们不够好用或者说不够偷懒。于是 requests 的作者 Kenneth Reitz 开发了用于创建和管理 python 虚拟环境的工具 —- pipenv。

    它能够自动为项目创建和管理虚拟环境,从 Pipfile 文件中添加或者删除包,同时生成 Pipfile.lock 文件来锁定安装包的版本和依赖信息,避免构建错误。

    pipenv 主要解决了以下问题:

    不用再单独使用 virtualenv、pyenv 和 pip 了,现在它们结合到了一起。

    不用再维护 requirement.txt 了,使用 Pipfile 和 Pipfile.lock 来代替。

    可以在开发环境使用多个 python 版本。

    在安装的 pyenv 条件下,可以自动安装需要的 python 版本。

    安全,广泛地使用 Hash 校验,能够自动曝露安全漏洞。

    随时查看图形化的依赖关系。

    安装 pipenv

    由于我的开发环境一直都是 Mac 笔记本,所以这里只介绍在 Mac 环境如何安装好了。

    使用 pip 安装

    $ pip install --user pipenv

    这个命令在用户级别(非系统全局)下安装 pipenv。如果安装后 shell 提示找不到 pipenv 命令,你需要添加当前 Python 用户主目录的 bin 目录到 PATH 环境变量。如果你不知道 Python 用户主目录在哪里,用下面的命令来查看:

    $ python -m site --user-base

    你会看到类似下面的输出

    /Users/liyafeng/Library/Python/3.6

    使用 brew 安装

    Mac 下使用 brew 安装软件应该是最方便的了,推荐使用:

    brew install pipenv

    升级 pipenv:

    brew upgrade pipenv

    shell 自动补齐

    Linux or Mac 环境下,bash下如果能自动命令补全岂不是更好?请把如下语句追加到.bashrc或者.zshrc即可:

    eval "$(pipenv --completion)"

    常用命令

    pipenv 具有的选项:

    $ pipenv

    Usage: pipenv [OPTIONS] COMMAND [ARGS]...

    Options:

    --where 显示项目文件所在路径

    --venv 显示虚拟环境实际文件所在路径

    --py 显示虚拟环境Python解释器所在路径

    --envs 显示虚拟环境的选项变量

    --rm 删除虚拟环境

    --bare 最小化输出

    --completion 完整输出

    --man 显示帮助页面

    --three / --two 使用Python 3/2创建虚拟环境(注意本机已安装的Python版本)

    --python TEXT 指定某个Python版本作为虚拟环境的安装源

    --site-packages 附带安装原Python解释器中的第三方库

    --jumbotron An easter egg, effectively.

    --version 版本信息

    -h, --help 帮助信息

    pipenv 可使用的命令参数:

    Commands:

    check 检查安全漏洞

    graph 显示当前依赖关系图信息

    install 安装虚拟环境或者第三方库

    lock 锁定并生成Pipfile.lock文件

    open 在编辑器中查看一个库

    run 在虚拟环境中运行命令

    shell 进入虚拟环境

    uninstall 卸载一个库

    update 卸载当前所有的包,并安装它们的最新版本

    一些例子:

    Usage Examples:

    Create a new project using Python 3.6, specifically:

    $ pipenv --python 3.6

    Install all dependencies for a project (including dev):

    $ pipenv install --dev

    Create a lockfile containing pre-releases:

    $ pipenv lock --pre

    Show a graph of your installed dependencies:

    $ pipenv graph

    Check your installed dependencies for security vulnerabilities:

    $ pipenv check

    Install a local setup.py into your virtual environment/Pipfile:

    $ pipenv install -e .

    Use a lower-level pip command:

    $ pipenv run pip freeze

    pipenv 使用过程

    创建环境,安装指定 python 的版本信息:

    mkdir new_env & cd new_env

    pipenv install // pipenv install --three

    如果指定了 --two 或者 --three 选项参数,则会使用 python2 或者 python3 的版本安装,否则将使用默认的 python 版本来安装。当然也可以指定准确的版本信息:

    $ pipenv install --python 3

    $ pipenv install --python 3.6

    $ pipenv install --python 2.7.14

    pipenv 会自动扫描系统寻找合适的版本信息,如果找不到的话,同时又安装了 pyenv 的话,则会自动调用 pyenv 下载对应版本的 python, 否则会报错。

    这时候在当前 new_env 环境下生成 Pipfile 和 Pipfile.lock 两个环境初始化文件。

    进入|退出环境:

    进入环境:

    pipenv shell

    退出环境:

    exit //或者 ctrl+d

    安装第三方包:

    这里我们测试安装 urllib3 包好了:

    pipenv install urllib3

    此时,Pipfile 里有最新安装的包文件的信息,如名称、版本等。用来在重新安装项目依赖或与他人共享项目时,你可以用 Pipfile 来跟踪项目依赖。

    Pipfile 是用来替代原来的 requirements.txt 的,内容类似下面这样。source 部分用来设置仓库地址,packages 部分用来指定项目依赖的包,dev-packages 部分用来指定开发环境需要的包,这样分开便于管理。

    $ cat Pipfile

    [[source]]

    url = "https://pypi.org/simple"

    verify_ssl = true

    name = "pypi"

    [packages]

    "urllib3" = "*"

    [dev-packages]

    [requires]

    python_version = "3.6"

    Pipfile.lock 则包含你的系统信息,所有已安装包的依赖包及其版本信息,以及所有安装包及其依赖包的 Hash 校验信息。

    $ Pipfile.lock

    {

    "_meta": {

    "hash": {

    "sha256": "af58f3510cb613d4d9241128f9a0ceb9bb936ad907543e23ad8317011dcb6715"

    },

    "pipfile-spec": 6,

    "requires": {

    "python_version": "3.6"

    },

    "sources": [

    {

    "name": "pypi",

    "url": "https://pypi.org/simple",

    "verify_ssl": true

    }

    ]

    },

    "default": {

    "urllib3": {

    "hashes": [

    "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",

    "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"

    ],

    "index": "pypi",

    "version": "==1.23"

    }

    },

    "develop": {}

    }

    现在安装另一个包,再次查看这两个文件的内容。你会发现 Pipfile 现在包含两个安装包了,Pipfile.lock 也包含了所有已安装包的依赖包及其版本信息,以及所有安装包及其依赖包的 Hash 校验信息。每次你安装新的依赖包,这两个文件都会自动更新。

    安装指定版本包:

    pipenv install urllib3==1.22

    安装开发环境下的包:

    加 --dev 表示包括 Pipfile 的 dev-packages 中的依赖。

    pipenv install httpie --dev

    卸载第三方包:

    pipenv uninstall urllib3 //或者 pipenv uninstall --all

    更新安装包:

    pipenv update urllib3

    更新所有包:

    pipenv update

    这个命令会删除所有软件包然后重新安装最新的版本。

    查看虚拟环境目录:

    $ pipenv --venv

    /Users/liyafeng/.local/share/virtualenvs/new_env-UVLdq9CB

    最后的虚拟环境目录是以当前环境 new_env 作为目录开头的。

    查看项目根目录:

    $ pipenv --where

    /Users/liyafeng/Documents/www/pythondemo/new_env

    检查软件包的完整性

    你是否担心已安装的软件包有没有安全漏洞?没关系,pipenv 可以帮你检查,运行下面的命令:

    $ pipenv check

    Checking PEP 508 requirements…

    Passed!

    Checking installed package safety…

    All good!

    上面的命令根据 Pipfile 里的 PEP 508 标记检查安全漏洞。

    查看依赖树

    $ pipenv graph

    httpie==0.9.9

    - Pygments [required: >=2.1.3, installed: 2.2.0]

    - requests [required: >=2.11.0, installed: 2.19.1]

    - certifi [required: >=2017.4.17, installed: 2018.4.16]

    - chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4]

    - idna [required: <2.8,>=2.5, installed: 2.7]

    - urllib3 [required: >=1.21.1,<1.24, installed: 1.23]

    锁定版本

    更新 lock 文件锁定当前环境的依赖版本

    pipenv lock

    环境变量管理

    如果你开发调试时需要配一堆环境变量,可以写到 .env 文件中,在 pipenv shell 进入虚拟环境时,它会帮你把这些环境变量加载好,非常方便。

    例如写一个 .env 文件:

    echo "FOO=hello foo" > .env

    之后 pipenv shell 进入虚拟环境,echo $FOO 就能看环境变量的值 hello foo 已经设置好了。

    参考链接

    展开全文
  • distlib Distlib是一个库,用于实现与Python软件的打包和... 上传:使用 twine 上传到PyPI。 原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/pythonops/2880.html
  • 转载于:...刚开始学习Python时,看资料和别人介绍中提到过,安装Python的包有的用easy_install, setuptools, 的使用pip,distribute。现在把这些相关的资料整理一下,能更清晰...
  • 现实世界里的 C/C++ 犹如神圣罗马帝国,固然一个委员会在名义上号令天下,但事实上是各路诸侯的方言割据:Vistual Studio 的 C 与 GCC 的 C 不一样,而 GCC 的 C 又与 Clang 的 C 不一样;除去这些巨头之外,又 ...
  • Composer是一个非常流行的PHP包依赖管理工具,已经取代PEAR包管理器,对于PHP开发者来说掌握Composer是必须的。对于使用者来说Composer非常的简单,通过简单的一条命令将需要的代码包下载到vendor目录下,然后开发者就...
  • 1.1.4节 -- Python的包管理工具pippip包pip list(退出python环境后再输入) 列出匹配管理的包有哪些pip install 包名 安装一个包(默认安装最新版本)pip install 包名==3.2.0 安装版本为3.2.0的包注:1.如果已经存在这...
  • 点击进入_更多_Java千百问jdk工具包有哪些工具JDK工具包中提供了很多工具和实用的程序。涵盖了基本工具( javac, java, javadoc, apt, appletviewer, jar, jdb, javah, javap, extcheck),安全工具,国际化工具,...
  • 包管理工具npm

    2018-09-21 17:03:26
    npm 是随同NodeJS一起安装的包管理工具,能解决nodejs代码部署上的很多问题。 二、npm使用场景有哪些? 允许用户从NPM服务器下载别人编写的第三方包到本地使用 允许用户从NPM服务器下载并安装别人的命令行程序到...
  • Python的包管理工具pip

    2020-10-10 15:43:57
    1.1.4节 -- Python的包管理工具pip pip包 pip list(退出python环境后再输入) 列出匹配管理的包有哪些 pip install 包名 安装一个包(默认安装最新版本) pip install 包名==3.2.0 安装版本为3.2.0的包 注:1....
  • Debian 的包管理工具

    2014-12-28 14:52:42
    ref:https://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.zh-cn.html The Debian GNU/Linux FAQ第 7 章 - Debian 的包管理工具7.1 提供了哪些管理工具?7.1.1 dpkg这个主要的软件包管理工具, 很多参数, ...
  • 很多企业在项目开发过程中都会遇到时间、预算、...1)支持API的新一代团队协作和数据管理平台—— vika维格表vika维格表是对于企业和团队用于项目管理、门店管理、客户管理、人事管理、任务协同等业务场景,并且把它...
  • 在2016年10月11日facebook 公开了新的javascript包管理工具 yarn, 用来替代目前被广泛使用的npm(nodejs 自带的包管理工具),本文将介绍yarn工具带来的优点和使用入门,以及对比npm解决了什么问题,带来哪些便利。...
  • 高效的、良好的项目管理工具必须具备快速的、强大的且包含:调度、成本控制、资源分配、文档、协作以及沟通等功能,如此才助于开发效率,下面给大家推荐一些还不错的开源项目管理工具。当然,首先还是给自家产品...
  • k8s包管理工具helm3应用

    万次阅读 2020-08-05 17:24:22
    网上很多官方的解释,说helm是Kubernetes 的包管理器。但是对于我自己的理解来说,我需要的基本都是订制自己的应用,所以对我来说helm更像是一个让我能快速的创建k8s部署文件的管理工具。 helm解决了我的哪些难题 ...
  • 这大数据分析命令行工具有哪些是对十二种类Unix操作系统命令行工具的简短概述,这些工具可用于大数据分析任务。该名单不包括任何一般的文件管理命令(pwd,ls,mkdir,rm,...)或远程会话管理工具(rsh,ssh,...),...
  • JVM监控工具有哪些

    2020-01-11 19:40:44
    jps        Java Virtual Machine Process Status Tool        jps是java自带的查看java进程的命令...在一个项目中多个JVM运行时,比windows自带的任务管理器里查看方便...
  • 上文我们说到开发模式,相信大家已经有了自己心仪的开发框架,并且知道...1.1 首先我们来看看包管理工具有哪些: npm:npm管理工具是Node自带的也是npm官方的管理工具,当你安装完Node的时候它就默认安装在了Nod...
  • Sublime Text是一个编辑器,它功能丰富、支持多种语言、自己的包管理器,开发者可通过包管理器安装组件、插件和额外的样式,以提升编码体验,在开发者群体中非常受欢迎。Eclipse+PyDev。Eclipse是古老且流行的程序...
  • 概述我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。...常见的包管理有,dep、go vendor、glide、go modules 等。最开始,使用过 dep,当时被朋友 diss 了,推荐我使用 go module...
  • Python包管理工具PIP常用命令详解

    千次阅读 2018-04-27 15:39:30
    1. PIP安装 目前Python2.7.10以上版本和Python3.3...安装好pip后,直接命令行输入pip查看有哪些命令: 日常大家都是新装、卸载、更新和查看相关的Python,因此也就只介绍基础的pip命令给大家,如果需要深入了...
  • BI分析工具然后进行“智能运算”——联机分析处理,通过建模等形式进行多维分析数据;数据挖掘,在数据中寻找“规律”,将其转化为信息和知识。最后,把这些知识系统而直观的展示给管理者。相对应的产品层面,BI软件...
  • Anaconda Python 是完全免费的企业级的Python发行大...包管理使用 conda,GUI基于PySide,容量适中,但该的科学计算包都。Anaconda 支持所有操作系统平台,它的安装、更新和删除都很方便,且所有的东西都只安装...
  • 甩手工具箱是一款网店卖家必备工具,软件包含了抓取商品、店铺复制、制作阿里数据包、数据包处理、制作主图视频、全能快递单打印、宝贝排名查询、一键图书采集等优秀网店商品管理功能。产品自上线以来,得到了众多...
  • 案例分析一:假定CPU的主频是500MHz。硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过。如果CPU在DMA初始化设置和启动硬盘...案例分析二:请求分页管理...
  • pip是一个安装和管理Python工具,可以使用下面的命令安装pip:sudoapt-getinstallpython-pippip命令格式:pip[options]常用pip命令参数:install 安装软件.uninstall 卸载软件.freeze 按着一定格式输出已安装...
  • 一.前言 初学者使用golang的时候可能会遇到这样几个问题 1.在使用go get的时候... Go Modules有哪些特点: Go Modules是官方正式推出的依赖管理项目,由Russ Cox (即Go 现在的掌舵人)推动,dep是“official expe

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 851
精华内容 340
关键字:

包管理工具有哪些