如何将自己写的模块上传到pypi

楔子

我们在安装第三方包的时候,直接一个pip install xxx命令就搞定了,然后pip会去pypi上寻找我们要安装的包,然后下载下来。

而pypi(Python Package Index )你可以看成是官方维护的一个大仓库,专门用来存储世界各地的程序员编写的第三方模块。我们使用pip进行安装的时候就会去这个仓库里面找,找到了进行下载,找不到就提示不存在。

当然我们在安装的时候还可以指定清华源、豆瓣源,因为pypi在国外,下载有时候比较慢,而一旦指定了国内的源,那么就不会去pypi上下载了,所以你可以看成国内也有仓库,专门负责搬运pypi里面的内容。

上传模块至pypi

总共分为三步:编写模块、编译模块、上传模块。

编写模块

我们看一下要上传到pypi的模块长什么样子。

  • hanser-module-upload:项目的根目录
  • hanser:模块名,我们后面可以使用from hanser import xxx,或者import hanser
  • hanser下面的两个py文件:相应的代码
  • LICENSE:开源的 LICENSE,如:Apache License 2.0,MIT License 等等
  • README.md:关于项目的描述,描述如何安装、使用等情况
  • setup.py:setuptools 的构建脚本

然后我们看看代码长什么样子。

# calc.py
def add(x: int, y: int) -> int:
 return x + y

def sub(x: int, y: int) -> int:
 return x - y

# __init__.py
from .calc import add, sub

然后最重要的就是编写setup.py。

# setup.py 是一个 setuptools 的构建脚本,其中包含了项目和代码文件的信息
# 如果没有需要先安装,pip install setuptools
import setuptools

setuptools.setup(
 # 项目的名称
 name="anser-module-upload",
 #项目的版本
 version="0.0.1",
 # 项目的作者
 author="布诺妮亚",
 # 作者的邮箱
 author_email="hanser@baka.com",
 # 项目描述
 description="简单的加减运算上传测试",
 # 项目的长描述
 long_description="简单的加减运算上传测试",
 # 以哪种文本格式显示长描述
 long_description_content_type="text/markdown", # 所需要的依赖
 install_requires=[], # 比如["flask>=0.10"]
 # 项目主页
 url="https://www.baidu.com",
 # 项目中包含的子包,find_packages() 是自动发现根目录中的所有的子包。
 packages=setuptools.find_packages(),
 # 其他信息,这里写了使用 Python3,MIT License许可证,不依赖操作系统。
 classifiers=[
  "Programming Language :: Python :: 3",
  "License :: OSI Approved :: MIT License",
  "Operating System :: OS Independent",
 ],
)

编译

在上传代码之前,我们需要将代码编译。除了setuptools之外,我们还需要一个模块wheel,如果没有则需要安装。

pip install --user --upgrade setuptools wheel

然后对我们的setup.py进行编译。

python setup.py sdist bdist_wheel

编译成功之后会在项目中生成多个目录,其中有一个dist目录是我们需要上传的。

上传

然后就是上传了,我们需要前往(https://pypi.org/account/register/)注册一个账号,然后再安装一个模块:twine,因为上传需要使用到它。

pip install --user --upgrade twine

安装完成之后,就可以使用如下命令上传 dist 文件夹里面的文件。

python -m twine upload --repository pypi dist/*

我们看到上传成功,下面去页面看一下。

注意:这里为了区分,我们把根目录名和模块名取得不一样,我们需要pip install hanser-module-upload,然后在site-packages下面会有一个hanser目录,也就是我们所使用的模块。但是一般情况下,这两者都是一样的。比如:我们安装pandas,那么得到的模块也叫做pandas。

下面就来试一试吧:

成功安装,当然也是可以使用的。

以后如果我们自己写了一个比较不错的模块的时候,就可以发布到pypi上面。

以上就是如何将自己写的模块上传到pypi的详细内容,更多关于模块上传到pypi的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python中pip安装非PyPI官网第三方库的方法

    在python中安装非自带python模块,有三种方式: 1.easy_install 2.pip 3.下载压缩包(.zip, .tar, .tar.gz)后解压, 进入解压缩的目录后执行python setup.py install命令 本文主要针对pip安装时可能会碰到的一种情况,及解决办法: 假如我要安装pylint模块,该模块非python自带模块,用import肯定不能导入,需要额外安装 复制代码 代码如下: >>> import pylint  Traceback (most

  • Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解

    wheel文件 Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容.按照官网说法,wheels是发行版Python的新标准并且要取代.egg. Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义. Wheel现在被认为是Python的二进制包的标准格式. 以下是Wheel和Egg的主要的不同点: Wheel有一个官方的PEP427来定义

  • python自制包并用pip免提交到pypi仅安装到本机【推荐】

    不得不说python的自制包的相关工具真是多且混乱,什么setuptools,什么distutils,什么wheel,什么egg!!怎么有这么多啊?? 而且我的需求且且是创建一个自制包管理自己常用的代码,也必不想提交到PyPI,仅仅只需要安装到本机就行. 下面就是几个关键步骤. 文件目录布局 ├── package1 │ └──-├── init .py | |── mod1.py │ └── mod2.py ├── setup.py |── README.md 编写setup.py文件,类似如

  • 将python包发布到PyPI和制作whl文件方式

    wheel文件 Wheel和Egg都是python的打包格式,目的是支持不需要编译或制作的安装过程,实际上也是一种压缩文件,将.whl的后缀改为.zip即可可看到压缩包里面的内容.按照官网说法,wheels是发行版Python的新标准并且要取代.egg. Egg格式是由setuptools在2004年引入,而Wheel格式是由PEP427在2012年定义. Wheel现在被认为是Python的二进制包的标准格式. 以下是Wheel和Egg的主要的不同点: Wheel有一个官方的PEP427来定义

  • 使用docker+devpi搭建本地pypi源的方法

    前一段时间开发需要经常使用 pip 下载,虽然把 pip 源改成了国内源,但我对速度还是不满意,更为重要的是集成 测试环境是离线的,要在集成测试环境开发显然需要搭建自己的本地 pip 源.在使用 devpi 之前我曾使用过 pip2pi,但有个 bug 导致离线环境下的 tox 命令总是失败,所以最后采用 devpi 搭建 pip 源.这里使用 docker 部署,方便又快速,如果不小心弄崩了也只需要重新运行 docker 容器就好了.如果你的环境没有安装 docker 可以自行搜素安装方法,比

  • 如何使用Docker搭建pypi私有仓库

    一.搭建 1.准备htpasswd.txt文件 该文件内容包含上传包至仓库时验证的用户名和密码 pip install htpasswd htpasswd -sc htpasswd.txt <username> 2.启动容器 docker run --name pypiserver --restart=always -v /data/pypi/packages:/data/packages -v /root/htpasswd.txt:/data/htpasswd.txt -p 8080:808

  • 完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误

    报错信息 最近闲来无事,用python的tkinter库开发了一款带日程提醒的万年历桌面程序.在程序开发结束开始打包时,却发现一直报错 PyInstaller cannot check for assembly dependencies. Please install PyWin32 or pywin32-ctypes. pip install pypiwin32 但是运行pip install pypiwin32时却提示两个库都已经安装过了 可是当再运行打包脚本时就是死活无法打包,就是提示缺少

  • Python上传package到Pypi(代码简单)

    废话不多说了,直接给大家贴代码了. 编写setup.py后 $ python setup.py register $ python setup.py sdist upload 以上是针对Python上传package到Pypi(代码简单)的全部内容,本文写的不好,还请大家多多指教,在此小编祝大家新年快乐.

  • python 如何上传包到pypi

    有过一定的 Python 经验的开发者都知道,当引入第三方包时,我们常常会使用 pip install 命令来下载并导入包. 那么,如何写一个自己的包,上传到 PyPI 呢,其他开发者也可以通过 pip install 命令下载并导入? 本文提供了最简单的示例. 准备好项目目录 创建一个项目目录,其目录结构如下: /packaging_tutorial /example_pkg __init__.py 其中,packaging_tutorial 是一个文件目录,example_pkg 是一个你希

  • 使用豆瓣提供的国内pypi源 原创

    pip使用过程中的痛苦,大家相必都已经知道了,目前豆瓣提供了国内的pypi源,源包相对会略有延迟,但不影响基本使用. pip install some-package -i https://pypi.douban.com/simple/ PyPI(Python Package Index)是python官方的第三方库的仓库,所有人都可以下载第三方库或上传自己开发的库到PyPI.PyPI推荐使用pip包管理器来下载第三方库. pip可正常工作在Windows.Mac OS.Unix/Linux等操

  • 搭建pypi私有仓库实现过程详解

    1. 安装依赖 pip install pypiserver passlib 2. 创建packages目录 mkdir packages 3. 以无认证方式启动pypiserver pypi-server -p 8080 -P . -a . ./packages 4. 编写.pypirc配置文件 [distutils] index-servers = pypi local [pypi] username:xxx password:xxxx [local] repository:http://l

随机推荐