零基础编程——Python模块项目打包发布PyPI,pip可安装
off999 2024-10-29 15:02 52 浏览 0 评论
摘要
书接前文:
01-《零基础编程——起步并搭建Python环境》及图书推荐
本文将讲解Python模块打包封装成为第三方库并且及发布到pypi,可以使用pip安装使用
内容:
一 模块创建使用
1-创建一个模块(文件),命名为:fibo.py
2-调用使用模块
3-将模块作为脚本执行
二 包创建使用 Python Package
1-创建包
2-为什么需要__init__.py文件?
三 打包Python项目为第三方库
1-给包、项目添加setup.py文件并打包发布
2-安装到python模块中
3-使用自己刚才打包的模块
四 发布包到PyPI
1-PyPi注册自己的账号
2-校验我们打的包
3-在用户目录下创建认证信息
4-上传发布
5-安装使用
五 技术总结及源码地址一 模块创建使用
1-创建一个模块(文件),命名为:fibo.py
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
2-调用使用模块
import fibo
fibo.fib(1000)
dir(fibo)#查看fibo模块的方法
fibo.__name__from fibo import * #这种方式导入模块,这会导入除以下划线(_)开头的所有名称之外的所有名称,一般我们用这种方式导入。
为了加快模块的加载速度,Python将每个模块的编译版本缓存在__pycache__名称下的目录中,该版本对编译文件的格式进行编码;它通常包含Python版本号.而将模块作为执行脚本的方式执行,不会产生缓存。
3-将模块作为脚本执行
修改fibo.py的__name__方法,代码如下:
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
命令行进入该文件目录,并执行:python fibo.py 1000
格式为
python fibo.py <arguments>运行结果如下:
二 包创建使用 Python Package
1-创建包
创建一个fibo文件夹,新建一个__init__.py文件,该__init__.py文件通常为空,也可以用__all__则将其模块函数名称的列表。同样建立子文件夹fibo1、fibo2,下面分别有__init__.py和fibo.py
fibo.py 代码:
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
调用包(使用)
#方式1
import fibo.fibo1.fibo
fibo.fibo1.fibo.fib(1000)
#方式2
from fibo.fibo1.fibo import fib
fib(1000)
分析:
Python的package有两种方式:regular packages、 namespace packages.
regular package的方式需要有个__init__.py文件,当导入包时候会隐式执行__init__.py文件,该文件可以绑定包空间里面的方法名称、以及包含其他模块属性。一般都是空的,表示改包下面的所有方法。如果没有该文件,删除该__init__.py文件,Python将不再在该目录中查找子模块,因此尝试导入该模块将失败。
2-为什么需要__init__.py文件?
为方便起见:其他用户将不需要知道您的函数在包层次结构中的确切位置
your_package/
__init__.py
file1.py
file2.py
...
fileN.py
# in __init__.py
from file1 import *
from file2 import *
...
from fileN import *
# in file1.py
def add():
pass
然后其他人可以通过以下方式调用add()
from your_package import add
不知道file1,例如
from your_package.file1 import add如果您想初始化一些东西;例如,日志记录(应放在顶层):
import logging.config
logging.config.dictConfig(Your_logging_config)三 打包Python项目为第三方库
1-给包、项目添加setup.py文件并打包发布
准备setup.py/setup.conf文件,它是放在你包的根目录的,这一步至关重要,包括要发布的包名字,版本,license,描述,特性(classifier)等等
setup.py格式如下:
from setuptools import setup, find_packages
setup(
name='<项目的名称>',
version='<项目版本>',
description=(
'<项目的简单描述>'
),
long_description=open('README.rst').read(),
author='<你的名字>',
author_email='<你的邮件地址>',
maintainer='<维护人员的名字>',
maintainer_email='<维护人员的邮件地址',
license='MIT License',
packages=find_packages(),
platforms=["all"],
url='<项目的网址,一般都是github的url>',
classifiers=[
'Development Status :: 4 - Beta',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Software Development :: Libraries'
],
)我们的setup.py内容如下:
from setuptools import setup, find_packages
setup(
name="fibo",
version="0.0.1",
description=(
"freso-studio,test packaging fibo"
),
long_description=open("README.rst").read(),
author="freostudio",
author_email="1600690028@qq.com",
maintainer="freostudio",
maintainer_email="1600690028@qq.com",
packages=find_packages(),
url="https://github.com/freostudio/fibo",
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)最终我们整个fibo的项目结构如下:
进入命令行控制台:进入该目录,打包一个源代码的包执行
#1-生产tar.gz的包
python setup.py sdist build
#2-或者执行生产wheels格式的包
python setup.py bdist_wheel --universal执行完后:会新增dist文件夹及test-fibo-0.0.1.tar.gz
fibo-0.0.1.tar.gz是我们可以安装的第三方库了
2-安装到python模块中
(可以拷贝到其他电脑测试使用)
test_fibo-0.0.1.tar.gz,命令行进入该目录,执行:
pip install fibo-0.0.1.tar.gz3-使用自己刚才打包的模块
任意路径进入命令行
执行:
python
#调用模块方式1
import fibo.fibo1.fibo
fibo.fibo1.fibo.fib(1000)
#调用模块方式2
from fibo.fibo1.fibo import fib
fib(1000)四 发布包到PyPI
1-PyPi注册自己的账号
正式发布:
https://pypi.org/
测试发布:
https://test.pypi.org/
2-校验我们打的包
再包目录下执行命令:python3 setup.py check
没有报错即可,输出一般是running check,如果有错误或者警告,就会在此之后显示.没有任何显示表示Distutils认可你这个setup.py文件
3-在用户目录下创建认证信息
windows路径:/user/用户名/新建文件.pypirc文件
[distutils]
index-servers =
pypi
pypitest
[pypi]
repository: https://upload.pypi.org/legacy/
username: your_username
password: your_password
[pypitest]
repository: https://test.pypi.org/legacy/
username: your_username
password: your_password4-上传发布
进入刚才我们打包的路径下执行命令
python setup.py sdist upload -r pypitest
##成功上传测试环境后再执行发布到正式环境
python3 setup.py sdist upload -r pypi执行结果如下:
报错:
Upload failed (403): The user 'freostudio' isn't allowed to upload to project 'fibo'. See https://test.pypi.org/help/#project-name for more information.
error: Upload failed (403): The user 'freostudio' isn't allowed to upload to project 'fibo'. See https://test.pypi.org/help/#project-name for more information.到测试环境查fibo发现已经存在了,https://test.pypi.org/search/?q=fibo
只好我们换个包名:freostudio_fibo
到我们账号下面去查看package:已经上传成功
https://test.pypi.org/project/freostudio_fibo/
5-安装使用
我们先从测试环境中下载包看看
pip download freostudio_fibo -i https://test.pypi.org/simple/安装到本地使用:
pip install freostudio_fibo -i https://test.pypi.org/simple/成功安装
测试使用:
python
#调用模块方式1
import freostudio_fibo.fibo1.fibo as fb
fb.fib(1000)
#调用模块方式2
from freostudio_fibo.fibo1.fibo import fib
fib(1000)成功调用
五 总结
学会创建模块、包,并且编译打包成安装包,注册PyPI账号,并且发布上传自己的包给别人用。
最后献上源码:https://github.com/freostudio/fibo
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
