【python】上传 Python 包到 pypi 官网
一. 概述
在上一篇【爬虫】将 Scrapy 部署到 k8s文章中提到在自定义 spiderkeeper
镜像时报错,所以自己基于它的源码提交了一个叫做 spiderkeeper-new
的 python
包到 pypi
官网,本文将记录一下整个构建过程,希望对有同样需求的小伙伴提供一些帮助。编程资料点击免费领取
二. 上传 Python 包到 pypi 官网
首先还是查看官方文档,官方文档写的很详细,阅读完官方文档之后,就知道了整个构建流程,这里主要是对阅读的文档做一个总结,省去了很多细节的介绍,便于快速上手体验。
1. 配置项目
在项目的根目录下面创建一个 setup.py
文件,这里以 spiderkeeper
的内容为例,setup.py
文件的内容如下:
#!/usr/bin/env python
from os import path
from setuptools import setup, find_packageshere = path.abspath(path.dirname(__file__))
with open(path.join(here, 'requirements.txt'), 'r', encoding='utf-8') as f:all_reqs = f.read().split('\n')with open(path.join(here, 'README.md'), 'r', encoding='utf-8') as f:long_description = f.read()install_requires = [x.strip() for x in all_reqs if 'git+' not in x]setup(name='SpiderKeeper-new', # 必填,项目的名字,用户根据这个名字安装,pip install SpiderKeeper-newversion='1.0.0', # 必填,项目的版本,建议遵循语义化版本规范author='edisonwd', # 项目的作者description='Admin ui for spider service, update info: upgrade dependent package', # 项目的一个简短描述long_description=long_description, # 项目的详细说明,通常读取 README.md 文件的内容long_description_content_type='text/markdown', # 描述的格式,可选的值: text/plain, text/x-rst, and text/markdownauthor_email='2388100489@qq.com', # 作者的有效邮箱地址url='https://github.com/edisonwd/SpiderKeeper', # 项目的源码地址license='MIT',include_package_data=True,packages=find_packages(), # 必填,指定打包的目录,默认是当前目录,如果是其他目录比如 src, 可以使用 find_packages(where='src')install_requires=install_requires, # 指定你的项目依赖的 python 包,这里直接读取 requirements.txt# 下面的设置将在命令行提供一个叫做 spiderkeeper 的命令,用来执行 SpiderKeeper 包下 run 的 main 方法启动项目entry_points={'console_scripts': {'spiderkeeper = SpiderKeeper.run:main'},},# 分类器通过对项目进行分类,帮助用户找到项目classifiers=['Development Status :: 4 - Beta','License :: OSI Approved :: MIT License','Operating System :: OS Independent','Programming Language :: Python :: 2.7','Programming Language :: Python :: 3.7',],
)复制代码
上面的 setup.py
文件中引用了 requirements.txt
和 README.md
这两个文件,默认情况下,打包 python 的源码发行包中只包含 py 文件,如果安装的时候没有引入那两个文件会报错。要打包其他的文件到发行包中,需要在 MANIFEST.in
文件中指定,spiderkeeper 的 MANIFEST.in
内容如下:
recursive-include SpiderKeeper/app/templates *
recursive-include SpiderKeeper/app/static *
include requirements.txt
include README.md
复制代码
2. 打包项目
在构建项目的 sdists
和 wheel
之前,需要先安装 build
包,使用如下命令:
pip install build
复制代码
在 setup.py
文件的位置使用下面的命令构建项目的源码包和 wheel 包:
python -m build
复制代码
-m 选项后面的内容是 module(模块),其作用是把模块当成脚本来运行。
如果只想构建源码包,可以执行下面的命令:
python -m build --sdist
复制代码
如果只想构建 wheel 包,可以执行下面的命令:
python -m build --wheel
复制代码
构建完成之后,会在项目的根目录下生成一个 dist/
目录存放构建的包。
3. 上传项目到 pypi
twine
是一个上传 python 包到 pypi 的工具,使用下面的命令安装:
pip install twine
复制代码
在上传之前,使用下面的命令检查构建的包是否有问题:
twine check dist/*
复制代码
创建账户
首先,需要一个PyPI用户帐户。可以使用 PyPI 网站上的表格创建一个帐户 。
现在将创建一个 PyPI API 令牌,以便能够安全地上传的项目。
转到pypi.org/manage/acco… API 令牌;不要将其范围限制在特定项目,因为正在创建一个新项目。
在复制并保存令牌之前不要关闭页面 - 将不会再看到该令牌。
为避免每次上传时都必须复制和粘贴令牌,可以创建一个$HOME/.pypirc
文件:
[pypi]
username = __token__
password = <the token value, including the `pypi-` prefix>
复制代码
请注意,这会将的令牌以明文形式存储。
有关更多详细信息,请参阅.pypirc
.
上传你的发行版
一旦你有了一个帐户,你就可以 使用twine将你的发行版上传到PyPI。
无论项目是否已存在于 PyPI 上,上传版本的过程都是相同的 - 如果尚不存在,它将在上传第一个版本时自动创建。
对于第二个和后续版本,PyPI 只要求新版本的版本号与任何以前的版本不同。
twine upload dist/*
复制代码
可以通过导航到上传的项目名称https://pypi.org/project/<sampleproject>
所在的 URL 来查看的包是否已成功 传,上传的项目可能需要一两分钟才能出现在网站上。
三. 遇到的问题
使用 pip install 安装包的时候提示升级,使用如下命令:
pip install --upgrade pip setuptools wheel
复制代码
报错如下:
ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: 'e:\\anaconda3\\scripts\\pip.exe'
Consider using the `--user` option or check the permissions.
复制代码
再次执行 pip 命令,报错如下:
> pip
Script file 'E:\anaconda3\Scripts\pip-script.py' is not present
复制代码
原因分析
在使用 pip install --ugrade pip 命令升级的时候,会先将原来的 pip 卸载掉再安装新版本的 pip,但是在成功卸载之后,由于权限的问题无法安装新版本 pip ,所以 pip 就没法使用了。
解决方法
使用以下方法来安装:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本
$ python get-pip.py # 运行安装脚本
复制代码
**注意:**用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本,如果是 Python3 则执行以下命令:
$ sudo python3 get-pip.py # 运行安装脚本。 复制代码
一般情况 pip 对应的是 Python 2.7,pip3 对应的是 Python 3.x。
部分 Linux 发行版可直接用包管理器安装 pip,如 Debian 和 Ubuntu:
sudo apt-get install python-pip
复制代码
参考文档
packaging.python.org/en/latest/g…
packaging.python.org/en/latest/g…
pypi.org/help/#file-…
twine.readthedocs.io/en/stable/
【python】上传 Python 包到 pypi 官网相关推荐
- spark python 上传代码包_使用 Livy Rest API 提交 spark 批量任务 (jar,Python, streaming)...
Livy是一个开源的REST 接口,用于与Spark进行交互,它同时支持提交执行代码段和完整的程序. image.png Livy封装了spark-submit并支持远端执行. 启动服务器 执行以下命 ...
- 2018年7月份,python上传自己的包库到pypi官网的方法
最近pypi官网进行了更新,老的上传网址作废了.记录下上传到pypi的方法 0.去pypi官网注册账号,没账号是不可能上传的,想想也是那不乱套了吗,注册后会收到一个邮件需要点击然后重新登录 1.目录就 ...
- python教程之打包python源码上传的PyPI官网
为什么打包源码 如果你想让你的实现的python代码,通过pip install 方式供所有人进行下载:那就需要将代码上传到PyPi上,这样才能让所有人使用: 如何打包源码上传: 前提条件: 1.有一 ...
- esp8266 刷 MicroPython固件,并使用MicroPython File Uploader python文件上传工具上传python文件
1.使用模块esp8266 2.进入固件官网:https://micropython.org/download/esp8266/ 3.将下载的esp8266-20220618-v1.19.1.bin放 ...
- 用Python上传文件
Python正在吞噬这个世界!您会发现许多热情的Python程序员和同样多的批评者,但不可否认的是,Python在当今软件开发中是一个强大的.相关的.不断增长的力量. Python只是一种语言,语言不 ...
- python下载文件传到服务器_windows上python上传下载文件到linux服务器指定路径【转】...
从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...
- django + python上传文件的两种方式
突然心血来潮,研究了下django+python上传文件的两种方式. 第一:直接采用文件读写的方式上传 1. settings.py文件中设置文件的存放路径和文件读取路径 MEDIA_ROOT = o ...
- npm包的上传npm包的步骤,与更新和下载步骤
官网: ======================================================= 没有账号可以先注册一个,右上角点击"Sign Up",有账号 ...
- 无法获取签名信息,请上传有效包(110506)
此篇文章将要介绍安卓App提交应用商店时遇到的两个小问题的相关介绍,具体代码请看下文 陆陆续续做了一个半月左右的「喵呜天气」终于在今天下午成功提交到应用商店(腾讯应用宝).期间遇到两个小问题,记录如下 ...
最新文章
- cd: mkdir: rmdir: rm
- Angularjs中文教程
- 解决在thinkphp5.0中用ajax访问后台控制器方法时,返回的数据显示不出来
- EasyUI datagrid 分页保持选中状态
- 云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server
- 解决模拟MOSS用户调用WebService打开个人站点进行操作
- 13 CO配置-控制-内部订单-定义定单类型
- 微信公众平台开发(150)——从新浪云SAE上传图片到图文消息
- C#获取上传文件的扩展名
- BP神经网络模型与学习算法
- 【笔记篇】01初识供应链——之《实战供应链》
- 联想xiaoxin700-15isk黑苹果clover分享
- python mkl 锐龙 cpu_Matlab 升级适配 AMD 锐龙,满血性能轻松提升 60%
- 三、三个路由器间的互联
- notepad++格式化xml文件
- 关于重装系统后没有以太网和wifi的问题解决
- ppp项目是什么意思?ppp模式是什么意思?PPP问题大全
- AVT Mako/Manta面阵相机开发小结
- 制作启动盘(带数据,不用格式化)
- sqlserver数据库导入
热门文章
- k3note Android8,增强用户体验 八款高品质音乐手机推荐
- win10能装文件服务器吗,win2003图文详解文件服务器的安装步骤
- ios xcode11 Embedded Binaries添加动态库
- 操作型数据库(OLTP) VS 分析型数据库(OLAP)
- java技术大牛修炼记4-华为超级技术大牛的十年经验总结
- 蓝桥杯模拟赛-算年龄
- html快闪软件制作,快闪视频制作方法
- 弘辽科技:淘宝宝贝如何修改库存?会影响权重吗?
- 添加 wappalyzer浏览器插件
- C++ Primer- 变量声明和定义的关系