一、学习目标:

学习如何将自己的项目或者方法打包成一个模块,上传到pypi里面,然后方便使用这个模块进行多个机器使用,不用再一次一次复制到项目统计目录下,直接pip安装即可对台机器分布式使用。

二、具体步骤:

1、注册账号:

注册地址:

在这里插入图片描述

2、查看模块结构

https://pypi.org/project/requests/#files

在这里插入图片描述

3、测试自己的生成一个模块

安装打包需要使用的模块

pip install twine
pip install wheel

1)、模块结构编写:

  1. 接下来,就是先建立一个Python文件夹MyPacekage_test,将自己写的.py文件放到这个文件夹下面,并且在同级目录同时创建一个__init__.py文件

  2. MyPacekage_test的同级目录下面建立一个setup.py文件

大致结构图:
在这里插入图片描述

①、setup.py文件
from distutils.core import  setup


packages = ['MyPacekage_test']

setup(name='MyPacekage_test-add',version='1.0',author='zjf', packages=packages, package_dir={'requests': 'requests'},)

解释:

1、MyPacekage_test-add 是最后pip list显示的模块名称
2、packages = [‘MyPacekage_test’] 中的MyPacekage_test 是import 可以引入的名称。

②、__init__.py文件

把一些模块文件导入过来

from . import add_num
③、add_num.py文件:

这个是直接的方法或者类的功能文件,需要在__init__.py文件导入,这样安装之后才能直接使用。

我这里只是简单测试下一个功能,简单写了三个方法:
add_,md5,sha1三个方法函数。


import hashlib

def add_(num1,num2):
    return num1 + num2


def md5_( name):
    # 创建md5对象
    m = hashlib.md5()
    # 若写法为m.update(str)  报错为: Unicode-objects must be encoded before hashing
    b = name.encode(encoding='utf-8')
    m.update(b)
    str_md5 = m.hexdigest()
    return str_md5


def sha1( name):
    sha1 = hashlib.sha1()
    key = name.encode('utf-8')
    # key ='how to use sha1 in '  # TypeError: Unicode-objects must be encoded before hashing
    sha1.update(key)
    sha1_str = sha1.hexdigest()
    return sha1_str

    

2)、生成模块步骤:

先记录下当前的tree文件。
在这里插入图片描述

①、编译:

运行python setup.py build来编译模块

 python setup.py build

在这里插入图片描述
tree看下:
在这里插入图片描述

②、生成发布压缩包:

生成发布压缩包:python setup.py sdist

python setup.py sdist

在这里插入图片描述

生成了压缩包文件:
在这里插入图片描述

③、生成网络发布包wheel文件:

注意点:

记得一定要再setup.py 导入import setuptools不然会一直报错:error: invalid command 'bdist_wheel'

python setup.py bdist_wheel

在这里插入图片描述

在这里插入图片描述

④、本地直接安装
# 可以是相对路径,也可以是绝对路径
pip install ./dist/MyPacekage_test_add-1.0-py3-none-any.whl
# 强制安装,如果已经安装,替换原来的
pip install ./dist/MyPacekage_test_add-1.0-py3-none-any.whl --force-reinstall

在这里插入图片描述
在这里插入图片描述

3)、测试使用:

from MyPacekage_test import add_num



result1 = add_num.add_(3,5)
print("result1",result1)
result2 = add_num.md5_('121231')
print("result2",result2)

result3 = add_num.sha1('121231')
print("result3",result3)




输出结果:

result1 8
result2 84ed30001fcccfc70cc54b02b82bbe7d
result3 9e1d6d393777fa08a4cf642c0bf67adbd08962de

4)、上传到pypi里面:

上传命令:

twine upload dist/*

在这里插入图片描述
登陆pypi:
查看是否成功:
在这里插入图片描述

5)、卸载刚刚本地安装的,然后重新安装线上的

①、卸载:
# 找下自己的模块:
pip list
# 卸载
pip uninstall MyPacekage-test-add
# 查看是否卸载完全
pip show MyPacekage-test-add

在这里插入图片描述

在这里插入图片描述

②、pip安装测试:

模块地址:https://pypi.org/project/MyPacekage-test-add/

pip install MyPacekage-test-add

在这里插入图片描述
安装成功,经验了我,突然我想说,这清华镜像也太牛逼了吧,我刚刚才上传,清华镜像源都有了我测试的模块,

总结:

至此,Python自己写模块,并且将自己的模块发布到pypi的整体步骤流程,都记录下来了,其实我的草稿早就有了,只是一直很懒,老是往后堆积,今天总算吧整体流程撸了一遍,希望帮助需要的小伙伴。

参考

参考一些地址,还有遇到的问题的解决思路:

https://zhuanlan.zhihu.com/p/102265858
https://blog.csdn.net/coolcooljob/article/details/80082907
https://stackoverflow.com/questions/34819221/why-is-python-setup-py-saying-invalid-command-bdist-wheel-on-travis-ci

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐