利用setuptools发布Python程序到PyPI,为Python添砖加瓦
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?%3Aaction=register_form
注册好后编写你的配置文件~/.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教程。
版权申明:若没有特殊说明,文章皆是猿人学原创,没有猿人学授权,请勿以任何形式转载。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python爬虫入门教程 26-100 知乎文章图片爬取器之二
1. 知乎文章图片爬取器之二博客背景 昨天写了知乎文章图片爬取器的一部分代码,针对知乎问题的答案json进行了数据抓取,博客中出现了部分写死的内容,今天把那部分信息调整完毕,并且将图片下载完善到代码中去。 首先,需要获取任意知乎的问题,只需要你输入问题的ID,就可以获取相关的页面信息,比如最重要的合计有多少人回答问题。问题ID为如下标红数字 https://www.zhihu.com/question/ color=red>29024583 编写代码,下面的代码用来检测用户输入的是否是正确的ID,并且通过拼接URL去获取该问题下面合计有多少答案。 import requests import re import pymongo import time DATABASE_IP = '127.0.0.1' DATABASE_PORT = 27017 DATABASE_NAME = 'sun' client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT) db = client.sun db.authenticate("dba", "d...
- 下一篇
用python实现新词发现程序——基于凝固度和自由度
互联网时代,信息产生的数量和传递的速度非常快,语言文字也不断变化更新,新词层出不穷。一个好的新词发现程序对做NLP(自然预言处理)来说是非常重要的。 N-Gram加词频 最原始的新词算法莫过于n-gram加词频了。简单来说就是,从大量语料中抽取连续的字的组合片段,这些字组合片段最多包含n个字,同时统计每个字组合的频率,按照词频并设置一个阈值来判断一个字组合片段是否为词汇。 该方法简单处理速度快,它的缺点也很明显,就是会把一些不是词汇但出现频率很高的字组合也当成词了。 凝固度和自由度 这个算法在文章《互联网时代的社会语言学:基于SNS的文本数据挖掘》 里有详细的阐述。 凝固度就是一个字组合片段里面字与字之间的紧密程度。比如“琉璃”、“榴莲”这样的词的凝固度就非常高,而“华为”、“组合”这样的词的凝固度就比较低。 自由度就是一个字组合片段能独立自由运用的程度。比如“巧克力”里面的“巧克”的凝固度就很高,和“巧克力”一样高,但是它自由运用的程度几乎为零,所以“巧克”不能单独成词。 Python实现 根据以上阐述,算法实现的步骤如下: n-gram统计字组合的频率 如果文本量很小,可以直接用P...
相关文章
文章评论
共有0条评论来说两句吧...