asp.mvc 4项目发布文件目录结构_零基础编程——Python模块项目打包发布PyPI,pip可安装

摘要

书接前文:

01-《零基础编程——起步并搭建Python环境》及图书推荐

02-《零基础编程——变量与数据类型》

03-《零基础编程——Python循环、函数、类》

04-《零基础编程——Python文件、JSON数据存储》

05-《零基础编程——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-安装使用五 技术总结及源码地址
615fcf33eea73c7ae73555297bc544db.png

一 模块创建使用

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 fibofibo.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 resultif __name__ == "__main__":    import sys    fib(int(sys.argv[1]))    

命令行进入该文件目录,并执行:python fibo.py 1000

格式为

python fibo.py 

运行结果如下:

8d87fdf5b06d9ff0687517eb30c620ee.png

二 包创建使用 Python Package

1dbe9c2759219a99e4b8810ea24d9b43.png

1-创建包

创建一个fibo文件夹,新建一个__init__.py文件,该__init__.py文件通常为空,也可以用__all__则将其模块函数名称的列表。同样建立子文件夹fibo1、fibo2,下面分别有__init__.py和fibo.py

57c974868fa107b1b3a5b050a27a5396.png

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 resultif __name__ == "__main__":    import sys    fib(int(sys.argv[1]))    

调用包(使用)

#方式1import fibo.fibo1.fibo fibo.fibo1.fibo.fib(1000)#方式2from fibo.fibo1.fibo import fibfib(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__.pyfrom file1 import *from file2 import *...from fileN import *# in file1.pydef add():    pass     然后其他人可以通过以下方式调用add()from your_package import add不知道file1,例如from your_package.file1 import add

如果您想初始化一些东西;例如,日志记录(应放在顶层):

import logging.configlogging.config.dictConfig(Your_logging_config)

三 打包Python项目为第三方库

1-给包、项目添加setup.py文件并打包发布

准备setup.py/setup.conf文件,它是放在你包的根目录的,这一步至关重要,包括要发布的包名字,版本,license,描述,特性(classifier)等等

setup.py格式如下:

from setuptools import setup, find_packagessetup(    name='',    version='',    description=(        ''    ),    long_description=open('README.rst').read(),    author='',    author_email='',    maintainer='',    maintainer_email='',    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_packagessetup(    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的项目结构如下:

1eeebbf4c0559d89cb7165a6e1bcf96b.png

进入命令行控制台:进入该目录,打包一个源代码的包执行

#1-生产tar.gz的包python setup.py sdist build#2-或者执行生产wheels格式的包python setup.py bdist_wheel --universal
f295cf1c0642feba6e5a2b9129729059.png

执行完后:会新增dist文件夹及test-fibo-0.0.1.tar.gz

9b8bbde5fc98e7f95eb974f38a8d1d8e.png

fibo-0.0.1.tar.gz是我们可以安装的第三方库了

2-安装到python模块中

(可以拷贝到其他电脑测试使用)

test_fibo-0.0.1.tar.gz,命令行进入该目录,执行:

pip install fibo-0.0.1.tar.gz
11823d0e2e85ad5d0dbe57c06b9ceec4.png

3-使用自己刚才打包的模块

任意路径进入命令行

执行:

python#调用模块方式1import fibo.fibo1.fibo fibo.fibo1.fibo.fib(1000)#调用模块方式2from fibo.fibo1.fibo import fibfib(1000)
d907aa3861c933126571b5c718e7f575.png

四 发布包到PyPI

1-PyPi注册自己的账号

正式发布:

https://pypi.org/

测试发布:

https://test.pypi.org/

2-校验我们打的包

再包目录下执行命令python3 setup.py check

没有报错即可,输出一般是running check,如果有错误或者警告,就会在此之后显示.没有任何显示表示Distutils认可你这个setup.py文件

95bf928d325bdecd35e2f337a7ad8029.png

3-在用户目录下创建认证信息

windows路径:/user/用户名/新建文件.pypirc文件

[distutils]index-servers =  pypi  pypitest[pypi]repository: https://upload.pypi.org/legacy/username: your_usernamepassword: your_password[pypitest]repository: https://test.pypi.org/legacy/username: your_usernamepassword: your_password

4-上传发布

进入刚才我们打包的路径下执行命令

python setup.py sdist upload -r pypitest##成功上传测试环境后再执行发布到正式环境python3 setup.py sdist upload -r pypi

执行结果如下:

14a5f4abc66e84febcbece3b050eb649.png

报错:

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

79a5935374cbebb45fb56fee07af2882.png

到我们账号下面去查看package:已经上传成功

https://test.pypi.org/project/freostudio_fibo/

9b1cce8da9063b5c61a3fb1f8b0af4d1.png

5-安装使用

我们先从测试环境中下载包看看

pip download freostudio_fibo -i https://test.pypi.org/simple/
3bbe849d33417001fcd9564b70bae622.png

安装到本地使用:

pip install freostudio_fibo -i https://test.pypi.org/simple/

成功安装

39731e481b46ccf3079eb01c14a25ca5.png

测试使用:

python#调用模块方式1import freostudio_fibo.fibo1.fibo  as fbfb.fib(1000)#调用模块方式2from freostudio_fibo.fibo1.fibo import fib fib(1000)

成功调用

c1cd7e07a374716c3a9ef0c4d84379df.png

五 总结

学会创建模块、包,并且编译打包成安装包,注册PyPI账号,并且发布上传自己的包给别人用。

最后献上源码:https://github.com/freostudio/fibo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值