精华内容
下载资源
问答
  • 替代pypi
    2020-11-24 11:01:45

    转载:https://blog.csdn.net/weixin_42139375/article/details/82711201

    可能有很多刚入行不久的朋友们,每天都在用pip 命令install 一些python软件包,却对pypi 不甚了解,那这个pip和pypi之间有什么练习和区别呢?下面就带大家简单有个了解吧!希望能够帮助到大家!

    pip 是一个现代的,通用的 Python 包管理工具,是easy_install的替代品,英文python install packages!

    Python包索引(PyPI)是Python编程语言的软件存储库。

    PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。PyPI推荐使用pip包管理器来下载第三方库。

    pip可正常工作在Windows、Mac OS、Unix/Linux等操作系统上,但是需要至少2.6+和3.2+的CPython或PyPy的支持。python 2.7.9 和3.4以后的版本已经内置累pip程序,所以不需要安装。

    PyPI可帮助您查找和安装Python社区开发和共享的软件。

    包作者使用PyPI来分发他们的软件 。

    这里有pypi官方社区详细介绍,大家可以进去看看 https://pypi.org/,写得很详细!

    内容

    本节介绍在安装其他Python包之前要遵循的步骤。

    在继续之前,请确保您拥有Python,并且可以从命令行获得预期版本。您可以通过运行来检查:

    python --version

    你应该得到一些输出。如果您没有Python,请从python.org安装最新的3.x版本,或参考Hitchhiker的Python指南的安装Python部分。Python 3.6.3

    注意

    如果您是新手并且遇到如下错误:

    >>>

    >>>python --version

    Traceback (most recent call last):

    File "", line 1, in

    NameError: name 'python' is not defined

    这是因为本教程中的此命令和其他建议命令旨在在shell(也称为终端或 控制台)中运行。有关使用操作系统的shell和与Python交互的介绍,请参阅Python入门指南入门教程。

    注意

    如果您正在使用像IPython或Jupyter笔记本这样的增强型shell,则可以通过使用!字符为它们添加前缀来运行本教程中的系统命令:

    In [1]: import sys

    !{sys.executable} --version

    Python 3.6.3

    建议编写{sys.executable}而不是简单python,以确保命令在与当前运行的笔记本匹配的Python安装中运行(可能与python命令引用的Python安装不同)。

    注意

    由于大多数Linux发行版处理Python 3迁移的方式,使用系统Python而不首先创建虚拟环境的Linux用户应该python使用python3和使用pip命令替换本教程中的命令。千万不能 在本教程与运行任何命令:如果你得到一个权限错误,回来的部分上创建虚拟环境中,设置一个,然后用教程继续写。pip3 --usersudo

    此外,您需要确保您有可用的点数。您可以通过运行来检查:

    pip --version

    如果您从源代码安装Python,使用python.org的安装程序,或者通过Homebrew安装Python,那么您应该已经拥有了pip。如果您在Linux上并使用操作系统软件包管理器进行安装,则可能需要单独安装pip,请参阅 使用Linux软件包管理器安装pip / setuptools / wheel。

    如果pip尚未安装,则首先尝试从标准库引导它:

    python -m ensurepip --default-pip

    如果仍然不允许你运行pip:

    跑。[2] 这将安装或升级pip。此外,如果它们尚未安装,它将安装setuptools和wheel。pythonget-pip.py

    警告

    如果您使用的是由您的操作系统或其他软件包管理器管理的Python安装,请务必小心。get-pip.py不与这些工具协调,可能会使系统处于不一致状态。您可以使用 安装在其中设计用于本地安装的软件。python get-pip.py --prefix=/usr/local//usr/local

    虽然pip单独就足以从预先构建的二进制存档进行安装,但最新的setuptools和wheel项目副本对于确保您也可以从源存档进行安装非常有用:

    python -m pip install --upgrade pip setuptools wheel

    有关详细信息,请参阅下面的部分,但这是在典型Linux系统上使用的基本venv[3]命令:

    python3 -m venv tutorial_env

    source tutorial_env/bin/activate

    这将在tutorial_env子目录中创建新的虚拟环境,并配置当前shell以将其用作默认python环境。

    Python“虚拟环境”允许将Python 包安装在特定应用程序的隔离位置,而不是全局安装。

    想象一下,你有一个需要LibFoo版本1的应用程序,但另一个应用程序需要版本2.你如何使用这两个应用程序?如果将所有内容安装到/usr/lib/python3.6/site-packages(或任何平台的标准位置),则很容易在无意中升级不应升级的应用程序的情况下结束。

    或者更一般地说,如果你想安装一个应用程序并保留它,该怎么办?如果应用程序有效,则其库中的任何更改或这些库的版本都可能会破坏应用程序。

    另外,如果您无法将软件包安装到全局site-packages目录中,该怎么办?例如,在共享主机上。

    在所有这些情况下,虚拟环境可以帮助您。它们有自己的安装目录,并且不与其他虚拟环境共享库。

    目前,有两种常用的工具可用于创建Python虚拟环境:

    默认情况下,在Python 3.3及更高版本中可以使用venv,并在Python 3.4及更高版本中将pip和setuptools安装 到创建的虚拟环境中。

    virtualenv需要单独安装,但支持Python 2.7+和Python 3.3+,默认情况下,pip,setuptools和wheel始终安装到创建的虚拟环境中(无论Python版本如何)。

    基本用法如下:

    virtualenv

    source

    python3 -m venv

    source

    有关更多信息,请参阅virtualenv文档或venv文档。

    在上述两种情况下,Windows用户都应该_not_使用 source命令,而应该直接从命令shell 运行activate脚本。在Unix shell下使用source可确保虚拟环境的变量在当前shell中设置,而不是在子进程中设置(然后消失,没有任何有用的效果)。

    直接管理多个虚拟环境可能会变得乏味,因此 依赖关系管理教程引入了一个更高级别的工具Pipenv,它可以为您处理的每个项目和应用程序自动管理单独的虚拟环境。

    pip是推荐的安装程序。下面,我们将介绍最常见的使用方案。有关更多详细信息,请参阅pip文档,其中包含完整的参考指南。

    pip最常见的用法是使用需求说明符从Python包索引进行安装。一般来说,需求说明符由项目名称后跟可选的版本说明符组成。 PEP 440包含a 当前支持的说明符的完整规范。以下是一些例子。

    要安装最新版本的“SomeProject”:

    pip install 'SomeProject'

    要安装特定版本:

    pip install 'SomeProject==1.4'

    要安装大于或等于一个版本而不是另一个版本:

    pip install 'SomeProject>=1,<2'

    安装一个版本 与某个版本“兼容”:[4]

    pip install 'SomeProject~=1.4.2'

    在这种情况下,这意味着安装任何版本“== 1.4。*”版本也是“> = 1.4.2”。

    轮子是预先构建的分发格式,与源分发(sdist)相比,提供更快的安装,特别是当项目包含编译的扩展时。

    如果pip没有找到要安装的轮子,它将在本地构建一个轮子并将其缓存以供将来安装,而不是在将来重建源分发。

    将已安装的SomeProject从PyPI 升级到最新版本。

    pip install --upgrade SomeProject

    要安装与当前用户隔离的软件包,请使用以下--user标志:

    pip install --user SomeProject

    有关更多信息,请参阅pip文档中的“ 用户安装”部分。

    请注意,在--user虚拟环境中,该标志无效 - 所有安装命令都将影响虚拟环境。

    安装需求文件中指定的需求列表。

    pip install -r requirements.txt

    以“可编辑”模式从VCS安装项目。有关语法的完整细分,请参阅有关VCS支持的 pip部分。

    pip install -e git+https://git.repo/some_pkg.git#egg=SomeProject # from git

    pip install -e hg+https://hg.repo/some_pkg#egg=SomeProject # from mercurial

    pip install -e svn+svn://svn.repo/some_pkg/trunk/#egg=SomeProject # from svn

    pip install -e git+https://git.repo/some_pkg.git@feature#egg=SomeProject # from a branch

    从备用索引安装

    pip install --index-url http://my.package.repo/simple/ SomeProject

    除了PyPI之外,在安装期间搜索其他索引

    pip install --extra-index-url http://my.package.repo/simple SomeProject

    在开发模式下从本地src安装,即以项目似乎已安装的方式安装,但仍可从src树中编辑。

    pip install -e

    您也可以从src正常安装

    pip install

    安装特定的源归档文件。

    pip install ./downloads/SomeProject-1.0.4.tar.gz

    从包含存档的本地目录安装(并且不检查PyPI)

    pip install --no-index --find-links=file:///local/dir/ SomeProject

    pip install --no-index --find-links=/local/dir/ SomeProject

    pip install --no-index --find-links=relative/dir/ SomeProject

    要从其他数据源(例如Amazon S3存储)进行安装,您可以创建一个帮助应用程序,以便在数据中显示数据 PEP 503兼容索引格式,并使用该--extra-index-url标志指示pip使用该索引。

    ./s3helper --port=7777

    pip install --extra-index-url http://localhost:7777 SomeProject

    除稳定版本外,还可以查找预发布和开发版本。默认情况下,pip只能找到稳定的版本。

    pip install --pre SomeProject

    $ pip install SomePackage[PDF]

    $ pip install SomePackage[PDF]==3.0

    $ pip install -e .[PDF]==3.0 # editable project in current directory

    参考资料:

    https://pypi.org/

    更多相关内容
  • 版本: 2.0.0dev1 日期: 2020-10-10 来源: PyPI: 测试: 维护者: Anagnostopoulos < >,Matthew Planchard < > 执照: zlib / libpng +麻省理工学院社区: 在Zulip上与我们聊天! pypiserver是pip或easy_...
  • PyPI前端搜索,一个特性丰富的替代pip搜索
  • 可能有很多刚入行不久的朋友们,每天都在用pip 命令install 一些python软件包,却对pypi 不甚了解,那这个pip和pypi之间有什么练习和区别呢?下面就带大家简单有个了解吧!希望能够帮助到大家!     &...

     

     

             可能有很多刚入行不久的朋友们,每天都在用pip 命令install 一些python软件包,却对pypi 不甚了解,那这个pip和pypi之间有什么练习和区别呢?下面就带大家简单有个了解吧!希望能够帮助到大家!

              pip 是一个现代的,通用的 Python 包管理工具,是easy_install的替代品,英文python  install packages

              Python包索引(PyPI)是Python编程语言的软件存储库。

             PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI。PyPI推荐使用pip包管理器来下载第三方库。
    pip可正常工作在Windows、Mac OS、Unix/Linux等操作系统上,但是需要至少2.6+和3.2+的CPython或PyPy的支持。python 2.7.9 和3.4以后的版本已经内置累pip程序,所以不需要安装。

    PyPI可帮助您查找和安装Python社区开发和共享的软件。

    包作者使用PyPI来分发他们的软件 。

    这里有pypi官方社区详细介绍,大家可以进去看看   https://pypi.org/,写得很详细!

     

    1,安装包  https://packaging.python.org/tutorials/installing-packages/#installing-packages

    内容

    安装包的要求

    本节介绍在安装其他Python包之前要遵循的步骤。

    确保您可以从命令行运行

    在继续之前,请确保您拥有Python,并且可以从命令行获得预期版本。您可以通过运行来检查:

    python --version
    

    你应该得到一些输出。如果您没有Python,请从python.org安装最新的3.x版本,或参考Hitchhiker的Python指南的安装Python部分。Python 3.6.3

    注意

     

    如果您是新手并且遇到如下错误:

    >>>

    >>> python --version
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'python' is not defined
    

    这是因为本教程中的此命令和其他建议命令旨在在shell(也称为终端或 控制台)中运行。有关使用操作系统的shell和与Python交互的介绍,请参阅Python入门指南入门教程

    注意

     

    如果您正在使用像IPython或Jupyter笔记本这样的增强型shell,则可以通过使用!字符为它们添加前缀来运行本教程中的系统命令:

    In [1]: import sys
            !{sys.executable} --version
    Python 3.6.3
    

    建议编写{sys.executable}而不是简单python,以确保命令在与当前运行的笔记本匹配的Python安装中运行(可能与python命令引用的Python安装不同)。

    注意

     

    由于大多数Linux发行版处理Python 3迁移的方式,使用系统Python而不首先创建虚拟环境的Linux用户应该python使用python3和使用pip命令替换本教程中的命令。千万不能 在本教程与运行任何命令:如果你得到一个权限错误,回来的部分上创建虚拟环境中,设置一个,然后用教程继续写。pip3 --usersudo

    确保你可以在命令行中运行PIP 

    此外,您需要确保您有可用的点数。您可以通过运行来检查:

    pip --version
    

    如果您从源代码安装Python,使用python.org的安装程序,或者通过Homebrew安装Python,那么您应该已经拥有了pip。如果您在Linux上并使用操作系统软件包管理器进行安装,则可能需要单独安装pip,请参阅 使用Linux软件包管理器安装pip / setuptools / wheel

    如果pip尚未安装,则首先尝试从标准库引导它:

    python -m ensurepip --default-pip
    

    如果仍然不允许你运行pip

    • 安全下载get-pip.py [1]

    • 跑。[2] 这将安装或升级pip。此外,如果它们尚未安装,它将安装setuptoolswheelpythonget-pip.py

      警告

       

      如果您使用的是由您的操作系统或其他软件包管理器管理的Python安装,请务必小心。get-pip.py不与这些工具协调,可能会使系统处于不一致状态。您可以使用 安装在其中设计用于本地安装的软件。python get-pip.py --prefix=/usr/local//usr/local

    确保pip,setuptools和wheel是最新的

    虽然pip单独就足以从预先构建的二进制存档进行安装,但最新的setuptoolswheel项目副本对于确保您也可以从源存档进行安装非常有用:

    python -m pip install --upgrade pip setuptools wheel
    

    (可选)创建虚拟环境

    有关详细信息,请参阅下面部分,但这是在典型Linux系统上使用的基本venv [3]命令:

    python3 -m venv tutorial_env
    source tutorial_env/bin/activate
    

    这将在tutorial_env子目录中创建新的虚拟环境,并配置当前shell以将其用作默认python环境。

    创建虚拟环境

    Python“虚拟环境”允许将Python 安装在特定应用程序的隔离位置,而不是全局安装。

    想象一下,你有一个需要LibFoo版本1的应用程序,但另一个应用程序需要版本2.你如何使用这两个应用程序?如果将所有内容安装到/usr/lib/python3.6/site-packages(或任何平台的标准位置),则很容易在无意中升级不应升级的应用程序的情况下结束。

    或者更一般地说,如果你想安装一个应用程序并保留它,该怎么办?如果应用程序有效,则其库中的任何更改或这些库的版本都可能会破坏应用程序。

    另外,如果您无法将软件包安装到全局site-packages目录中,该怎么办?例如,在共享主机上。

    在所有这些情况下,虚拟环境可以帮助您。它们有自己的安装目录,并且不与其他虚拟环境共享库。

    目前,有两种常用的工具可用于创建Python虚拟环境:

    • 默认情况下,在Python 3.3及更高版本中可以使用venv,并在Python 3.4及更高版本中将pipsetuptools安装 到创建的虚拟环境中。
    • virtualenv需要单独安装,但支持Python 2.7+和Python 3.3+,默认情况下, pip setuptools wheel始终安装到创建的虚拟环境中(无论Python版本如何)。

    基本用法如下:

    使用virtualenv

    virtualenv <DIR>
    source <DIR>/bin/activate
    

    使用venv

    python3 -m venv <DIR>
    source <DIR>/bin/activate
    

    有关更多信息,请参阅virtualenv文档或venv文档。

    在上述两种情况下,Windows用户都应该_not_使用 source命令,而应该直接从命令shell 运行activate脚本。在Unix shell下使用source可确保虚拟环境的变量在当前shell中设置,而不是在子进程中设置(然后消失,没有任何有用的效果)。

    直接管理多个虚拟环境可能会变得乏味,因此 依赖关系管理教程引入了一个更高级别的工具Pipenv,它可以为您处理的每个项目和应用程序自动管理单独的虚拟环境。

    使用pip进行安装

    pip是推荐的安装程序。下面,我们将介绍最常见的使用方案。有关更多详细信息,请参阅 pip文档,其中包含完整的参考指南

    从PyPI安装

    pip最常见的用法是使用需求说明符Python包索引进行安装。一般来说,需求说明符由项目名称后跟可选的版本说明符组成。 PEP 440包含a 当前支持的说明符的完整规范。以下是一些例子。

    要安装最新版本的“SomeProject”:

    pip install 'SomeProject'
    

    要安装特定版本:

    pip install 'SomeProject==1.4'
    

    要安装大于或等于一个版本而不是另一个版本:

    pip install 'SomeProject>=1,<2'
    

    安装一个版本 与某个版本 “兼容” [4]

    pip install 'SomeProject~=1.4.2'
    

    在这种情况下,这意味着安装任何版本“== 1.4。*”版本也是“> = 1.4.2”。

    源分布与车轮

    pip可以从 Source Distributions(sdist) Wheels安装,但如果两者都存在于PyPI上,则pip将更喜欢兼容的wheel

    轮子是预先构建的分发格式,与源分发(sdist)相比,提供更快的安装,特别是当项目包含编译的扩展时。

    如果pip没有找到要安装的轮子,它将在本地构建一个轮子并将其缓存以供将来安装,而不是在将来重建源分发。

    升级包

    将已安装的SomeProject从PyPI 升级到最新版本。

    pip install --upgrade SomeProject
    

    安装到用户站点

    要安装与当前用户隔离的软件包,请使用以下--user标志:

    pip install --user SomeProject
    

    有关更多信息,请参阅pip文档中的“ 用户安装”部分。

    请注意,在--user虚拟环境中,该标志无效 - 所有安装命令都将影响虚拟环境。

    需求文件

    安装需求文件中指定的需求列表。

    pip install -r requirements.txt
    

    从VCS安装

    以“可编辑”模式从VCS安装项目。有关语法的完整细分,请参阅有关VCS支持的 pip部分。

    pip install -e git+https://git.repo/some_pkg.git#egg=SomeProject          # from git
    pip install -e hg+https://hg.repo/some_pkg#egg=SomeProject                # from mercurial
    pip install -e svn+svn://svn.repo/some_pkg/trunk/#egg=SomeProject         # from svn
    pip install -e git+https://git.repo/some_pkg.git@feature#egg=SomeProject  # from a branch
    

    从其他索引安装

    从备用索引安装

    pip install --index-url http://my.package.repo/simple/ SomeProject
    

    除了PyPI之外,在安装期间搜索其他索引

    pip install --extra-index-url http://my.package.repo/simple SomeProject
    

    从本地src树安装

    开发模式下从本地src安装,即以项目似乎已安装的方式安装,但仍可从src树中编辑。

    pip install -e <path>
    

    您也可以从src正常安装

    pip install <path>
    

    从本地存档安装

    安装特定的源归档文件。

    pip install ./downloads/SomeProject-1.0.4.tar.gz
    

    从包含存档的本地目录安装(并且不检查PyPI

    pip install --no-index --find-links=file:///local/dir/ SomeProject
    pip install --no-index --find-links=/local/dir/ SomeProject
    pip install --no-index --find-links=relative/dir/ SomeProject
    

    从其他来源安装

    要从其他数据源(例如Amazon S3存储)进行安装,您可以创建一个帮助应用程序,以便在数据中显示数据 PEP 503兼容索引格式,并使用该--extra-index-url标志指示pip使用该索引。

    ./s3helper --port=7777
    pip install --extra-index-url http://localhost:7777 SomeProject
    

    安装预发布

    除稳定版本外,还可以查找预发布和开发版本。默认情况下,pip只能找到稳定的版本。

    pip install --pre SomeProject
    

    安装Setuptools“Extras” 

    安装setuptools extras

    $ pip install SomePackage[PDF]
    $ pip install SomePackage[PDF]==3.0
    $ pip install -e .[PDF]==3.0  # editable project in current directory
    

    [1]在此上下文中,“安全”是指使用现代浏览器或curl等工具从https URL下载时验证SSL证书。
    [2]根据您的平台,这可能需要root或Administrator访问权限。pip目前正在考虑通过让用户安装默认行为来改变这种情况
    [3]从Python 3.4开始,venvvirtualenv的stdlib替代品 )将创建pip 预安装的virtualenv环境,从而使其成为virtualenv的平等替代品 。
    [4]兼容版本说明符已被接受 PEP 440 和支持在 setuptools v8.0和 pip v6.0中发布

     

    展开全文
  • 上传py模块到pypi

    2020-04-01 16:40:09
    1. 在pypi官网(https://pypi.org)注册并完成账号认证。 2. 在本地创建Python项目。 项目组成包括: tests文件夹,里面是空的就可以 ...文件的内容在pypi的官方指导文档有说明,直接复制粘贴即可:...

    1. 在pypi官网(https://pypi.org)注册并完成账号认证。

    2. 在本地创建Python项目。

    项目组成包括:

    tests文件夹,里面是空的就可以

    kcodepen.py 准备上传的模块文件。我在kcodepen中定义了四个函数,分别用来绘制方形、圆形、三角形和五角星:

     

    LICENSE 证书文件。文件的内容在pypi的官方指导文档有说明,直接复制粘贴即可:

    Copyright (c) 2018 The Python Packaging Authority
    
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.

     READMD.md 对要上传模块的说明,这些说明到时候会显示在pypi官网上供下载时对模块内容进行了解。文件的内容在pypi的官方指导文档有说明,直接复制粘贴即可:

    # Example Package
    
    This is a simple example package. You can use
    [Github-flavored Markdown](https://guides.github.com/features/mastering-markdown/)
    to write your content.

    setup.py 对要上传的模块进行编译处理。setup.py的总体内容在pypi的官方指导文档有说明,在此基础上我做了一些更改:

    import setuptools
    
    with open("README.md", "r") as fh:
        long_description = fh.read()  # 读取README.MD中的说明
    
    setuptools.setup(name="pykcode", # 这个是显示在PYPI中的名称,使用pip安装时也是这个名称
                     version="0.0.5",# 版本号,做pip install --upgrade的时候有用
                     author="piglite", # 作者
                     author_email="xxx@xxx.com", 
                     description="test package",
                     long_description=long_description, #传入README.MD中的说明内容
                     long_description_content_type="text/markdown",
                     url="https://github.com/piglite",
                     packages=setuptools.find_packages(),
                     classifiers=[
                         "Programming Language :: Python :: 3",
                         "License :: OSI Approved :: MIT License",
                         "Operating System :: OS Independent",
                     ],
                     python_requires='>=3.6',
                     py_modules=['kcodepen'] #要上传的模块,也就是项目中的kcodepen.py
    ) 

    setup 函数常用的参数如下:

    参数说明
    name包名称
    version包版本
    author程序的作者
    author_email程序的作者的邮箱地址
    maintainer维护者
    maintainer_email维护者的邮箱地址
    url程序的官网地址
    license程序的授权信息
    description程序的简单描述
    long_description程序的详细描述
    platforms程序适用的软件平台列表
    classifiers程序的所属分类列表
    keywords程序的关键字列表
    packages需要处理的包目录(通常为包含 __init__.py 的文件夹)
    py_modules需要打包的 Python 单文件列表
    download_url程序的下载地址
    cmdclass添加自定义命令
    package_data指定包内需要包含的数据文件
    include_package_data自动包含包内所有受版本控制(cvs/svn/git)的数据文件
    exclude_package_data当 include_package_data 为 True 时该选项用于排除部分文件
    data_files打包时需要打包的数据文件,如图片,配置文件等
    ext_modules指定扩展模块
    scripts指定可执行脚本,安装时脚本会被安装到系统 PATH 路径下
    package_dir指定哪些目录下的文件被映射到哪个源码包
    requires指定依赖的其他包
    provides指定可以为哪些模块提供依赖
    install_requires安装时需要安装的依赖包
    entry_points动态发现服务和插件,下面详细讲
    setup_requires指定运行 setup.py 文件本身所依赖的包
    dependency_links指定依赖包的下载地址
    extras_require当前包的高级/额外特性需要依赖的分发包
    zip_safe不压缩包,而是以目录的形式安装

    更多参数可见:https://setuptools.readthedocs.io/en/latest/setuptools.html

    find_packages函数

    对于简单工程来说,手动增加 packages 参数是容易。而对于复杂的工程来说,可能添加很多的包,这是手动添加就变得麻烦。Setuptools 模块提供了一个 find_packages 函数,它默认在与 setup.py 文件同一目录下搜索各个含有 __init__.py 的目录做为要添加的包。

    find_packages(where='.', exclude=(), include=('*',))
    

    find_packages 函数的第一个参数用于指定在哪个目录下搜索包,参数 exclude 用于指定排除哪些包,参数 include 指出要包含的包。

    默认情况下 setup.py 文件只在其所在的目录下搜索包。如果不用 find_packages,想要找到其他目录下的包,也可以设置 package_dir 参数,其指定哪些目录下的文件被映射到哪个源码包,如: package_dir={'': 'src'} 表示 “root package” 中的模块都在 src 目录中。

    包含数据文件

    • package_data:

    该参数是一个从包名称到 glob 模式列表的字典。如果数据文件包含在包的子目录中,则 glob 可以包括子目录名称。其格式一般为 {'package_name': ['files']},比如:package_data={'mypkg': ['data/*.dat'],}

    • include_package_data:

    该参数被设置为 True 时自动添加包中受版本控制的数据文件,可替代 package_data,同时,exclude_package_data 可以排除某些文件。注意当需要加入没有被版本控制的文件时,还是仍然需要使用 package_data 参数才行。

    • data_files:

    该参数通常用于包含不在包内的数据文件,即包的外部文件,如:配置文件,消息目录,数据文件。其指定了一系列二元组,即(目的安装目录,源文件) ,表示哪些文件被安装到哪些目录中。如果目录名是相对路径,则相对于安装前缀进行解释。

    • manifest template:

    manifest template 即编写 MANIFEST.in 文件,文件内容就是需要包含在分发包中的文件。一个 MANIFEST.in 文件如下:

    include *.txt
    recursive-include examples *.txt *.py
    prune examples/sample?/build
    

    MANIFEST.in 文件的编写规则可参考:https://docs.python.org/3.6/distutils/sourcedist.html

    生成脚本

    有两个参数 scripts 参数或 console_scripts 可用于生成脚本。

    entry_points 参数用来支持自动生成脚本,其值应该为是一个字典,从 entry_point 组名映射到一个表示 entry_point 的字符串或字符串列表,如:

    setup(
        # other arguments here...
        entry_points={
            'console_scripts': [
                'foo=foo.entry:main',
                'bar=foo.entry:main',
            ],    
        }
    )
    

    scripts 参数是一个 list,安装包时在该参数中列出的文件会被安装到系统 PATH 路径下。如:

    scripts=['bin/foo.sh', 'bar.py']
    

    用如下方法可以将脚本重命名,例如去掉脚本文件的扩展名(.py、.sh):

    from setuptools.command.install_scripts import install_scripts
    
    class InstallScripts(install_scripts):
    
        def run(self):
            setuptools.command.install_scripts.install_scripts.run(self)
    
            # Rename some script files
            for script in self.get_outputs():
                if basename.endswith(".py") or basename.endswith(".sh"):
                    dest = script[:-3]
                else:
                    continue
                print("moving %s to %s" % (script, dest))
                shutil.move(script, dest)
    
    setup(
        # other arguments here...
        cmdclass={
            "install_scripts": InstallScripts
        }
    )
    

    其中,cmdclass 参数表示自定制命令,后文详述。

    ext_modules

    ext_modules 参数用于构建 C 和 C++ 扩展扩展包。其是 Extension 实例的列表,每一个 Extension 实例描述了一个独立的扩展模块,扩展模块可以设置扩展包名,头文件、源文件、链接库及其路径、宏定义和编辑参数等。如:

    setup(
        # other arguments here...
        ext_modules=[
            Extension('foo',
                      glob(path.join(here, 'src', '*.c')),
                      libraries = [ 'rt' ],
                      include_dirs=[numpy.get_include()])
        ]
    )
    

    详细了解可参考:https://docs.python.org/3.6/distutils/setupscript.html#preprocessor-options

    zip_safe

    zip_safe 参数决定包是否作为一个 zip 压缩后的 egg 文件安装,还是作为一个以 .egg 结尾的目录安装。因为有些工具不支持 zip 压缩文件,而且压缩后的包也不方便调试,所以建议将其设为 False,即 zip_safe=False

    自定义命令

    Setup.py 文件有很多内置的的命令,可以使用 python setup.py --help-commands 查看。如果想要定制自己需要的命令,可以添加 cmdclass 参数,其值为一个 dict。实现自定义命名需要继承 setuptools.Command 或者 distutils.core.Command 并重写 run 方法。

    from setuptools import setup, Command
    
    class InstallCommand(Command):
        description = "Installs the foo."
        user_options = [
            ('foo=', None, 'Specify the foo to bar.'),
        ]
        def initialize_options(self):
            self.foo = None
        def finalize_options(self):
            assert self.foo in (None, 'myFoo', 'myFoo2'), 'Invalid foo!'
        def run(self):
            install_all_the_things()
    
    setup(
        ...,
        cmdclass={
            'install': InstallCommand,
        }
    )
    

    依赖关系

    如果包依赖其他的包,可以指定 install_requires 参数,其值为一个 list,如:

    install_requires=[
        'requests>=1.0',
        'flask>=1.0'
    ]
    

    指定该参数后,在安装包时会自定从 pypi 仓库中下载指定的依赖包安装。

    此外,还支持从指定链接下载依赖,即指定 dependency_links 参数,如:

    dependency_links = [
        "http://packages.example.com/snapshots/foo-1.0.tar.gz",
        "http://example2.com/p/bar-1.0.tar.gz",
    ]
    

    分类信息

    classifiers 参数说明包的分类信息。所有支持的分类列表见:https://pypi.org/pypi?%3Aaction=list_classifiers

    示例:

    classifiers = [
        # 发展时期,常见的如下
        #   3 - Alpha
        #   4 - Beta
        #   5 - Production/Stable
        'Development Status :: 3 - Alpha',
    
        # 开发的目标用户
        'Intended Audience :: Developers',
    
        # 属于什么类型
        'Topic :: Software Development :: Build Tools',
    
        # 许可证信息
        'License :: OSI Approved :: MIT License',
    
        # 目标 Python 版本
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.7',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
    ]
    

     

    3. 利用setup.py构建和编译项目:

     

    setup.py 文件有很多内置命令可供使用,查看所有支持的命令:

    python setup.py --help-commands

    此处列举一些常用命令:

    • build:

    构建安装时所需的所有内容

    • sdist:

    构建源码分发包,在 Windows 下为 zip 格式,Linux 下为 tag.gz 格式 。执行 sdist 命令时,默认会被打包的文件:

    所有 py_modules 或 packages 指定的源码文件
    所有 ext_modules 指定的文件
    所有 package_data 或 data_files 指定的文件
    所有 scripts 指定的脚本文件
    README、README.txt、setup.py 和 setup.cfg文件
    

    该命令构建的包主要用于发布,例如上传到 pypi 上。

    • bdist:

    本例中,显示你用build构建项目:

    python setup.py build

    注意,终端输入命令时,目录保持在setup.py所在文件夹

    编译项目:

    python setup.py sdist

    如果除了提供压缩文件还想提供.whl文件的话,可以用如下指令:

    python setup.py sdist bdist_wheel

    此时,被编译好的文件在项目文件夹的dist文件夹下:

     

    4. 在本地创建PYPI的账号信息文件。信息文件保存在登录用户文件夹下(例如:users/Adiministrator),文件名称是 .pypirc

    编辑 .pypirc

    [distutils]
    index-servers = pypi
    
    [pypi]
    username: pypi注册时的用户名
    password: pypi注册时的密码

    5. 上传到PYPI

    利用pip安装或更新上传工具twine

    pip install --upgrade twine

    利用twine上传项目文件夹中dist下的内容:

    twine upload dist/*

    注意,在终端输入twine upload dist/* 指令时,也应该在setup.py所在文件夹中。

    6. 上传成功后,在PYPI.org搜索就可以看到自己刚刚上传的内容。上传时我使用的名称(name)是pykcode

    7. 可以使用pip install进行安装或更新:

    pip install --upgrade pykcode

    8. 在项目中使用,导入时要使用写在setup.py中py_modules里面的内容: 

    import kcodepen
    import turtle
    
    t = turtle.Turtle()
    kcodepen.star(t, 100)
    
    turtle.done()

     

    展开全文
  • plz:PLZ Python PIP替代

    2021-02-04 13:31:37
    PLZ PLZ 替代。利用$ plz install pre-commit # Install 1 or more packages$ plz uninstall pre-commit # Uninstall 1 or more packages$ plz reinstall pre-commit # Reinstall 1 or more packages$ plz download ...
  • 该项目是 Windows 任务计划程序的简单替代品。 它是纯 Python(除了sleep ),所以没有理由不能在 Linux 上使用它,但这没有多大意义。 基本原则是 cron 作业和设置存储在 JSON 文本文件中。 每次运行脚本时,都会...
  • pypi和pip_Mozilla和PyPI

    2020-07-15 08:45:54
    pypi和pipVM setup for kitsune Kitsune的VM设置 The last time I wrote about PyPI some folks mistook the subject to be PyPy, so let me be clear: this article is about the Python Packaging Index. 我上...

    pypi和pip

    VM setup for kitsune

    Kitsune的VM设置

    The last time I wrote about PyPI some folks mistook the subject to be PyPy, so let me be clear: this article is about the Python Packaging Index.

    我上一次写有关PyPI的文章时,有些人误以为是PyPy ,所以请让我清楚:这篇文章是关于Python Packaging Index的

    I recently began doing some volunteer work for Mozilla[1], working on a virtual machine setup to make kitsune development easier (kitsune is the code name for the Django site that powers support.mozilla.com).

    我最近开始为Mozilla [1]做一些志愿工作,在虚拟机设置上进行工作,以简化kitsune的开发(kitsune是Django站点的代号,支持support.mozilla.com )。

    Git子模块 (Git submodules)

    In doing so, I came across an interesting command from their installation docs:

    为此,我从他们的安装文档中遇到了一个有趣的命令:

    $ git submodule update --init --recursive
    $ git submodule update --init --recursive
    

    I can recall some vague rumblings about git submodules prior to this incident, but nothing I’d call “familiarity”. So, I shrugged it off and went about the business of creating the VM (and resisting the urge to use zc.buildout to do it):

    我可以回想起在此事件之前关于git子模块的一些模糊的隆隆声,但是我什么也不会称之为“熟悉”。 因此,我耸了耸肩,开始了创建VM的工作(并抵制了使用zc.buildout来完成它的冲动):

    • On day 1, I created a VirtualBox VM using the latest Ubuntu Server and was able to assemble and run the application by following the instructions.
    • On day 2, I began to “vagrantize” the process. Here I ran into a bit of trouble with the git-submodule command[2]. This led me to seek alternative methods to install the various Python packages it was trying to install (when stuck on a problem I often like to pursue the alternatives immediately, so I have them if I need them.)
    • 在第一天,我使用最新的Ubuntu Server创建了VirtualBox VM,并能够按照说明组装和运行该应用程序。
    • 在第二天,我开始“证明”这一过程。 在这里,我遇到了git-submodule命令[2]的麻烦。 这导致我寻求替代方法来安装要尝试安装的各种Python软件包(当遇到问题时,我经常想立即寻求替代方法,因此如果需要,可以选择它们。)

    赞博尼 (Zamboni)

    Then, in the Mozilla IRC channel #sumodev (support mozilla) some nice Mozillian (willkg) pointed me to this gem:

    然后,在Mozilla IRC频道#sumodev( su pport mo zilla)中,一些不错的Mozillian(willkg)向我指出了这个宝石:

    Which in turn led me to the following two links:

    这又将我引向以下两个链接:

    Again, faint rumblings… this time about zamboni (not THAT Zamboni). I know I’ve heard of it, but I wouldn’t call myself familiar with it. So, I innocently read the following:

    再一次,微弱的隆隆声……这一次是关于zamboni(不是那个Zamboni)。 我知道我听说过,但是我不会叫自己熟悉它。 所以,我天真地读了以下内容:

    Python projects can incur a number of dependencies. “pip“ can be handy, but we’ve had better luck with distributing a “vendor“ library.
    Python项目可能会产生许多依赖关系。 “ pip”可能很方便,但是我们最好分发“ vendor”库。

    At which point I immediately thought to myself:

    这时我立即想到:

    Yeah… I hear that. 是的...我听到了。

    Followed a few seconds later by:

    几秒钟后跟随:

    Wait… what?!? 等等...什么?!?

    Playdoh (Playdoh)

    Some time/research later[3], I (re)discovered that zamboni is the codename for addons.mozilla.org[4]. And Playdoh is the code name for Mozilla’s base Django project setup. If you aren’t familiar with Playdoh, please do give it a whirl[5].

    经过一段时间的研究[3],我(重新)发现zamboni是addons.mozilla.org [4]的代号。 Playdoh是Mozilla基本Django项目设置的代号。 如果您对Playdoh不熟悉,请尝试一下[5]。

    聚酰亚胺 (PyPI)

    While all of this is very, very interesting to me, I am primarily a “systems and processes” guy; and what ultimately stuck with me after two days of Mozilla-ing is the following blurb from the Playdoh packaging documentation:

    尽管所有这些对我来说都非常有趣,但是我主要是一个“系统和流程”人。 经过两天的Mozilla-ing最终困扰我的是Playdoh包装文档中的以下内容:

    The “/vendor“ library is supposed to contain all packages and repositories. It enables the project to be deployed as one package onto many machines, without relying on PyPI-based installations on each target machine.
    “ / vendor”库应该包含所有软件包和存储库。 它使项目可以作为一个程序包部署到多台计算机上,而无需依赖每台目标计算机上基于PyPI的安装。

    “Nooooooooooooooo”, I am now saying to myself over and over. “Without relying on PyPI-based installations on each target machine.” Another “noooooooooooooooo!” I certainly don’t fault Mozilla for taking this approach, but it makes me sad that large organizations like Mozilla are passing over PyPI in favor of alternative methods of distributing Python software.

    “ Nooooooooooooooooo”,我现在不断对自己说。 “无需依赖每台目标计算机上基于PyPI的安装。” 另一个“ noooooooooooooooooo!” 我当然不会指责Mozilla采用这种方法,但是令我感到遗憾的是,像Mozilla这样的大型组织正在通过PyPI来支持分发Python软件的替代方法。

    Let us all now hang our heads, for a moment of pause and reflection.

    现在让我们所有人都垂下来,稍作停顿和反思。

    [a minute passes]

    [一分钟过去]

    未来 (The future)

    I can’t speak for anyone else, but I would certainly like to see this change in the future. I would LOVE to see PyPI become a place that Mozilla felt confident it could use to deploy Python software. And this is something I’d love to work on for Mozilla, if given the opportunity[6].

    我无法代表其他任何人说话,但我当然希望将来能看到这种变化。 我很希望看到PyPI成为Mozilla确信可以用来部署Python软件的地方。 如果有机会的话,我很乐意为Mozilla工作[6]。

    非常适合Python ==非常适合Mozilla? (Great for Python == great for Mozilla?)

    It’s obvious what’s in it for Python, but what’s in for Mozilla?

    很明显,Python中有什么功能,但是Mozilla中有什么功能呢?

    Simple.

    简单。

    I happen to share Mozilla’s vision for an open web and open source in general. And it’s great to see them embracing & using Python for their web projects! Without a doubt,  they are interested in giving back to the Python community (e.g. via Playdoh and the Django community, in this case.) So I suspect they’d be open to helping the Python community fix a long standing issue: the stability and reliability of the Python Package Index. It would certainly benefit them in the long run to simplify their build process to the point where git-submodule was no longer needed[7].

    我碰巧分享了Mozilla对开放网络和开放源代码的总体看法。 很高兴看到他们拥抱并在他们的Web项目中使用Python! 毫无疑问,他们有兴趣回馈Python社区(在这种情况下,例如通过Playdoh和Django社区。)因此,我怀疑他们愿意帮助Python社区解决长期存在的问题:稳定性和稳定性。 Python包索引的可靠性。 从长远来看,将它们的构建过程简化到不再需要git-submodule的地步,这肯定会给他们带来好处[7]。

    笔记 (Notes)

    [1] I am actively courting Mozilla in hopes of landing a gig by the end of the year. So all you Mozillians who know me personally, please put in a good word! And all you Mozillians I have not met yet: nice to meet you!

    [1]我正在积极地向Mozilla求爱,希望能在今年年底前获得演出。 因此,所有认识我的Mozillians都请您打个招呼! 以及我尚未遇见的所有Mozillians:很高兴认识您!

    [2] The problem turned out to be git-submodule failing to run because things like: grep and sed were missing from the PATH. Easily fixed by modifying the puppet configuration, but not easily discovered because git-submodule itself returned zero! Some guy on #puppet was very helpful in getting me to print out debug info.

    [2]问题是git-submodule无法运行,因为PATH中缺少诸如grep和sed之类的东西。 可以通过修改人偶配置轻松修复,但由于git-submodule本身返回零,因此不容易发现! #puppet上的某个人对让我打印出调试信息非常有帮助。

    [3] More help from friendly Mozillians in #webdev:

    [3] #webdev中友善的Mozillians提供了更多帮助:

    11:13 < groovecoder> aclark: yeah, zamboni is amo 11:13 < kumar> playdoh was extracted from zamboni and other apps 11:13 < kumar> but zamboni itself does not eat the playdoh dog food, actually 11:15 < kumar> aclark also, in case you’re not steeped in our initialisms, amo is addons.mozilla.org
    11:13 <groovecoder> aclark:是的,zamboni是amo 11:13 <kumar> playdoh是从zamboni和其他应用程序中提取的11:13 <kumar>,但是zamboni本身不吃playdoh狗食,实际上11:15 <kumar >也可以使用aclark,以防万一您不习惯我们的缩写,amo是addons.mozilla.org

    [4] There is a great presentation about it here: http://www.slideshare.net/andymckay/anatomy-of-a-large-django-site-7590098.)

    [4]此处有一个很好的介绍: http : //www.slideshare.net/andymckay/anatomy-of-a-large-django-site-7590098 。)

    [5] More from kumar (emphasis is my own):

    [5]来自kumar的更多内容(强调是我自己的):

    Playdoh is starting to stabilize so it would be Playdoh开始稳定下来,因此很 good to see some use of it outside Mozilla; this would probably help us catch Mozilla-specific things that need extraction 高兴看到Mozilla之外有一些使用它 ; 这可能会帮助我们捕获需要提取的Mozilla特定的东西

    [6] LARGE HINT 😉

    [6]大提示😉

    [7] Again, not that there is anything wrong with what Mozilla is doing here. As a systems guy, I just happen to gravitate toward simplifying processes by eliminating steps.

    [7]同样,这并不是Mozilla在这里所做的任何事情。 作为系统人员,我只是倾向于通过消除步骤来简化流程。

    翻译自: https://www.pybloggers.com/2011/09/mozilla-and-pypi/

    pypi和pip

    展开全文
  • Poetry / Flit 因为 Poetry,Flit 这些工具遵循 PEP 518 创建了一个 pyproject.toml 文件来替代 setup.py、Pipfile 等配置文件,所以我们可以在这个文件里更改 PyPI 源。 使用 Poetry 时,在 pyproject.toml 末尾...
  • 利用setup.py在pypi上发布自己的模块。
  • PYPI: ://pypi.python.org/pypi/pyscreenshot 目标:Pyscreenshot尝试允许在不安装第3方库的情况下截取屏幕截图。 它是跨平台的。 它只是一个纯Python的包装程序,是现有后端的薄层。 它的策略应适用于大多数...
  • 祖鲁族 包含UTC的本地日期时间的直接替代链接项目: : 说明文件: : PyPI: ://pypi.python.org/pypi/zulu/ Github动作: : 特征所有日期时间对象都已转换并存储为UTC。 默认情况下解析ISO8601格式的字符串和POSIX...
  • 适中最小的单用户 Delicio.us 替代品介绍Moderately Tasty 是一个带有标签支持的基本书签应用程序,使用 Flask 和 SQLite 构建。 这是一个单用户应用程序:您在自己的服务器上为自己安装一个实例,并且您是唯一使用...
  • xcffib xcffib旨在(主要)替代xpyb 。 xpyb的上游没有活动,有几次内存泄漏,仅python2,没有pypy支持。 xcffib是使用的绑定,可减轻上述问题。 xcffib还为1.10中的29个X扩展(xprint和xkb丢失)构建了绑定。安装...
  • 变速箱可以从pypi安装: pip install gearbox 应该只适用于大多数用户 盒子外面 只需安装变速箱本身,您的 TurboGears 项目就可以使用变速箱系统范围内的命令,如gearbox serve 、 gearbox setup-app和gearbox ...
  • python pypi Python is famous for coming with batteries included. Sophisticated capabilities are available in the standard library. You can find modules for working with sockets, parsing CSV, JSON, and...
  • 我遵循了将包上载到PyPI的官方文档,以及PyPI自述文件中提供的信息,但是每次都会出现HTTP 400错误:$ twine upload dist/*Uploading distributions to ...
  • PyPI上可用: : 特征现在可以使用单个API一次性定义,记录和解析命令行,配置文件,环境变量和默认设置(如果以多种方式指定了值,则可以:命令行>环境变量>配置文件值>默认值) 配置文件可以具有.ini或.yaml...
  • rm-protection:一个尽可能从根源防止误删的 rm 替代品rm-protection 与原生 rm 完全兼容(事实上它会将参数原封不动地传递给 rm),唯一不同的是,它在执行 rm 前将检查你要删的每一个文件或者目录是否被「保护」。...
  • uvloop是内建asyncio事件循环的一个快速的直接替代品。uvloop使用Cython实现的,使用libuv。
  • 有关Python 2.6的支持,请参见安装从PyPI安装最新发布的版本: pip install distro 安装最新的开发版本: pip install https://github.com/nir0s/distro/archive/master.tar.gz用法$ distroName: Antergos Linux...
  • Django生命周期挂钩 该项目提供了一个@hook装饰器,以及一个基础模型和mixin来为您的Django模型添加生命周期挂钩。 Django提供生命周期挂钩的内置方法是 。 但是,我的团队经常发现Signals引入了不必要的间接,并且...
  • pytest-mypy-plugin-shim 替代mypy不支持的Python实现的“ pytest-mypy-plugins”。 有关动作pytest插件,请参见 。 测验 聚酰亚胺 活动 质量检查 其他 安装可以从PyPI安装pytest-mypy-plugins-shim 。 要使用pip...
  • 不论是使用 pip,还是 Pipenv、Poetry 等工具,安装 Python 包的时候会默认从官方的 PyPI 源下载文件,速度比较慢。国内的一些公司和机构提供了 PyPI 镜像源(mirror source),你可以设置让这些工具从国内的镜像源...
  • 依存关系Kaa仅依赖以下python3软件包: 所有这些都可以通过pip或通过PyPI上软件包的相应页面进行安装。运行样本模型和示例。 Juypter笔记本名为kaa-intro提供了kaa用法的基本示例。 笔记本包含开始绘制可及集和相图...
  • pip,全称是:python install packages,它是一个通用的 Python 包管理工具,是easy_install的替代品, 主要是用于安装 PyPI 上的软件包。 PyPI,全称是:Python Package Index,它是Python官方的第三方库的仓库,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,406
精华内容 1,762
关键字:

替代pypi