资讯专栏INFORMATION COLUMN

利用setuptools发布Python程序到PyPI,为Python添砖加瓦

IntMain / 2878人阅读

摘要:众所周知的原因,国内访问国外网站总是不那么顺畅,于是就有了镜像,国内有很多,我用过阿里云的,中科大的,豆瓣的。阿里云的同步的好像不够及时,中科大的好像很及时,所以我就用中科大的。而通过可以指定当个文件作为包。

pip install的东西从哪里来的?

从PyPI (Python Package Index)来的,官网是: https://pypi.python.org/pypi/
执行pip install terminaltranslator命令的时候,它就会去从官方网站搜terminaltranslator,搜到了就下载压缩包并解压安装,如果没有搜索到就会报错。

众所周知的原因,国内访问国外网站总是不那么顺畅,于是就有了PyPI镜像,国内有很多,我用过阿里云的,中科大的,豆瓣的。阿里云的同步的好像不够及时,中科大的好像很及时,所以我就用中科大的。那么,该怎么用这些镜像呢?

方法1: 给pip加参数-i 后面跟镜像的url,但是要记住并每次都写这个url可是一件难事。
方法2: 编写配置文件~/.pip/pip.conf:

[global]
index-url = https://mirrors.ustc.edu.cn/pypi/web/simple

如何把你自己的Python程序发布到PyPI上面去?

首先去官网注册你的账号,不能师出无名总得留下你的大名嘛。注册地址:
https://pypi.python.org/pypi?...

注册好后编写你的配置文件~/.pypirc

[distutils]
index-servers = 
  pypi
  pypitest

[pypi]
repository=https://pypi.python.org/pypi
username=Your-Account
password=Your-Password

[pypitest]
repository=https://testpypi.python.org/pypi
username=Your-Account
password=Your-Password

这里配置了两个地址,一个是PyPI Live,是正式发布Python包的;另一个是PytPI Test 是用来正式发布之前验证你的包是否正常。

准备好你的Python包

通常你的代码目录结构如下:

root-dir/ # 你的代码的根目录

  setup.py
  setup.cfg
  LICENSE.txt
  README.md
  mypackage/
    __init__.py
    foo.py
    bar.py
    baz.py

其中的setup.py就是安装包的文件,格式如下:

from distutils.core import setup
setup(
  name = "mypackage",
  packages = ["mypackage"], # 跟上面代码目录下面的包名一致
  version = "0.1",
  description = "A setup test package",
  author = "veelion",
  author_email = "veelion@gmail.com",
  url = "https://github.com/veelion/mypackage", # 指向 github 仓库的URL
  keywords = ["testing", "logging", "example"], # 一些关键词
  classifiers = [],
)

setup可以从两个包里面调来使用,一个是上面用的distutils,另外一个是setuptools,如:

from setuptools import setup

这两个包功能基本一样,而setuptools支持wheel(未来包管理的趋势),所以一般用setuptools更好一些。再多说两句wheel,它是用来准备替换老的egg的,其中很好的一个优点是“二进制格式发布”,当包内含有C/C++写的扩展的时候可以把.so/.dll等二进制库打包进去,实现“一次编译,到处使用”的目标。省的用户编译时需要解决一堆依赖问题。

但是setuptools好像是不支持单文件包,即你的包只是一个.py文件而非上面说的是一个带__init__.py我目录。而distutils通过py_modules可以指定当个文件作为包。

上面说的是用setup.py管理Python包让其他人import用,而非在命令行下指向。

而terminaltranslator 是一个命令行工具,可以在setup.py里面不指定package而是指定scripts来把相关文件安装到bin目录下:

if __name__ == "__main__":
    from setuptools import setup

    setup(
        name="TerminalTranslator",
        version="0.8",
        author="Veelion chong",
        author_email="veelion@gmail.com",
        license="MIT",
        url="https://github.com/veelion/tt",
        description=("Linux terminal translating tool implemented in Python"),
        scripts=["t", "tt", "terminaltranslator.py"],
    )

这里还用到一个小tip,把terminaltranslator.py 链接为t和tt两个别名,这样命令行下使用起来更方便。 不过,好像Windows下不支持Linux的软链接,t和tt可能在Windows下出问题

发布到PyPI

首先,打包生成压缩包

python setup.py sdist
python setup.py bdist_wheel (distutils不支持这个wheel选项)

上传到PyPI:

python setup.py register #注册你的包,如果出现与已有包重名则报错
python setup.py upload
更新:在python3下面,python setup.py upload 已经无效,官方推荐用 twine 上传到pypi。

或者可以用twine (无需register,直接upload)

twine register dist/xxx.gz
twine register dist/xxx.whl
twine upload dist/*

文章来源于:猿人学网站的python教程。

版权申明:若没有特殊说明,文章皆是猿人学原创,没有猿人学授权,请勿以任何形式转载。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43728.html

相关文章

  • 如何在Pypi上发表自己的Python

    摘要:准备注册账号很显然地要在上注册一个账号。最终的代码结构打包上传在的同级目录下运行以下命令。大功告成之后我们就可以在里搜索到自己的库了,当然也可以直接通过安装。 背景 最近兴趣使然写了几个Python库,也发布到了Pypi上,虽然没什么人下载,但自己在其他机器上用着也会很方便。这里我向大家介绍一下如何在Pypi上发表自己的Python库。 准备 注册账号 很显然地要在Pypi上注册一个...

    nihao 评论0 收藏0
  • 通过demo学习OpenStack开发所需的基础知识 -- 软件包管理

    摘要:不幸的是,在软件包管理十分混乱,至少历史上十分混乱。的最大改进是将函数的参数单独放到一个的文件中这些成为包的元数据。基于的版本号管理。的版本推导这里重点说明一下基于的版本号管理这个功能。开发版本号的形式如下。 为什么写这个系列 OpenStack是目前我所知的最大最复杂的基于Python项目。整个OpenStack项目包含了数十个主要的子项目,每个子项目所用到的库也不尽相同。因此,对于...

    blastz 评论0 收藏0
  • 手把手教你发布一个Python

    摘要:本文主题如下编写一个包源代码,但不是本文的重点。发布包,发布的包可以有多种类型。查看为了生成和发布包,必须编写文件,编写该文件必须依赖于包,这个包本身也是一个包。编写测试文件然后运行配置为了发布包,必须在注册一个用户,注册邮箱需要验证。 本文主题如下: 编写一个包(Python 源代码),但不是本文的重点。 编译包,观察编译后的文件。 发布包,发布的包可以有多种类型。 如何在 Pypi...

    刘玉平 评论0 收藏0
  • Python 2.6 升级至 Python 2.7 的实践心得

    摘要:前言安装,因为软件版本上的需求所以考虑将升级至,加上生产环境还是以为主,互联网自动化运维平台大多数也推荐以来操作,选择还是也没有定论,找到适合的搭配即可。 前言 CentOS 6.8 安装 Python 2.7.13,因为软件版本上的需求所以考虑将 Python 升级至 2.7.13,加上生产环境还是以 RHEL 6 为主,互联网自动化运维平台大多数也推荐以Python 2.7.x +...

    godlong_X 评论0 收藏0
  • python setup.py 浅析

    摘要:浅析参数说明对于所有列表里提到的纯模块做处理需要在脚本里有一个包名到目录的映射。阐明包名到目录的映射,见键代表了包的名字,空的包名则代表不在任何包中的顶层包。最终会在下生成可执行文件,调用制定的函数实例分析 python setup.py 浅析 setuptools.setup() 参数说明 packages 对于所有 packages 列表里提到的纯 Python 模块做处理 需要...

    sevi_stuo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<