PyPI
Python包索引(Python Package Index, PyPI)为Internet上的第三方Python模块提供了一个集中的存储库,我们平时pip install的Python库都来自这个存储库,我们也可以将自己写好的模块上传到PyPI上面开源,让世界上所有的人都能看到你的python模块。
为了测试,我写了一个能完成经纬度转换为地理位置的小小demo(用的geopy库),代码如下:
from geopy.geocoders import Nominatim
"""author :longlong
purpose :practice
the function of the module:input latitude,and then convert latitude to location """
def print_position(lat,lng):
geolocator = Nominatim()
location = geolocator.reverse(str(lat)+','+str(lng),timeout=None)
print(location.address)
print_position函数有两个参数,分别是纬度和经度,功能是打印出所对应的地理信息。
准备发布
为了共享创建的这个模块,需要准备一个发布(distribution)的环境。python中,所谓的distribution是指一个文件集合,这些文件联合在一起允许你构建、打包和发布你的模块。
1. 新建一个文件夹,命名为lat_to_pos
2. 在lat_to_pos中创建一个setup.py文件,代码是你的个人信息以及模块信息,以上述代码为基准的setup.py代码如下:
from distutils.core import setup
setup(
name = 'lat_to_pos',
version = '1.0.0',
py_modules = ['lat_to_pos'],
author = 'longlong',
author_email = '1294054316@qq.com',
url = 'http://www.sunlainglong.cn',
description = 'convert latitude to location',
)
构建发布
1. 在lat_to_pos文件夹中打开一个终端窗口,键入命令:python setup.py sdist
2. 安装到本地的Python副本中,执行命令:python setup.py install
这时,lat_to_pos模块已经转换成了一个发布,并且安装在本地Python副本中。构建完成时,lat_to_pos文件夹的结构如下:
- lat_to_pos
- bulid - lib - lat_to_pos.py
- dist - lat__to_pos-1.0.0.tar.gz 发布包
- MANIFEST 包含发布中的文件列表
- lat_to_pos.py python模块
- setup.py 元数据
并且,现在就可以本地导入模块使用了,代码如下:
注意:import lat_to_pos
之后 print_position(23,112)
会报错,原因是需要加入命名空间: lat_to_pos.print_position(23,112)
主Python程序中(以及IDLE shell)的代码与一个名为__main__的命名空间关联,将代码放在其单独的模块中时,Python会自动创建一个与模块同名的命名空间。所以,我的模块中的代码会与一个名为lat_to_pos的命名空间关联。当然那,也可以通过from lat_to_pos import print_position
来导入模块,但是这个特定的impot语句导入的函数会覆盖你自己定义的同名函数。
向PyPI上传代码
1. 注册PyPI账号
2. 执行python setup.py register
根据个人情况选择123来验证身份,保存账号密码以备之后使用。
3. 执行python setup.py sdist upload
4. succeed