一. 概述

在上一篇【爬虫】将 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 官网相关推荐

  1. spark python 上传代码包_使用 Livy Rest API 提交 spark 批量任务 (jar,Python, streaming)...

    Livy是一个开源的REST 接口,用于与Spark进行交互,它同时支持提交执行代码段和完整的程序. image.png Livy封装了spark-submit并支持远端执行. 启动服务器 执行以下命 ...

  2. 2018年7月份,python上传自己的包库到pypi官网的方法

    最近pypi官网进行了更新,老的上传网址作废了.记录下上传到pypi的方法 0.去pypi官网注册账号,没账号是不可能上传的,想想也是那不乱套了吗,注册后会收到一个邮件需要点击然后重新登录 1.目录就 ...

  3. python教程之打包python源码上传的PyPI官网

    为什么打包源码 如果你想让你的实现的python代码,通过pip install 方式供所有人进行下载:那就需要将代码上传到PyPi上,这样才能让所有人使用: 如何打包源码上传: 前提条件: 1.有一 ...

  4. esp8266 刷 MicroPython固件,并使用MicroPython File Uploader python文件上传工具上传python文件

    1.使用模块esp8266 2.进入固件官网:https://micropython.org/download/esp8266/ 3.将下载的esp8266-20220618-v1.19.1.bin放 ...

  5. 用Python上传文件

    Python正在吞噬这个世界!您会发现许多热情的Python程序员和同样多的批评者,但不可否认的是,Python在当今软件开发中是一个强大的.相关的.不断增长的力量. Python只是一种语言,语言不 ...

  6. python下载文件传到服务器_windows上python上传下载文件到linux服务器指定路径【转】...

    从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...

  7. django + python上传文件的两种方式

    突然心血来潮,研究了下django+python上传文件的两种方式. 第一:直接采用文件读写的方式上传 1. settings.py文件中设置文件的存放路径和文件读取路径 MEDIA_ROOT = o ...

  8. npm包的上传npm包的步骤,与更新和下载步骤

    官网: ======================================================= 没有账号可以先注册一个,右上角点击"Sign Up",有账号 ...

  9. 无法获取签名信息,请上传有效包(110506)

    此篇文章将要介绍安卓App提交应用商店时遇到的两个小问题的相关介绍,具体代码请看下文 陆陆续续做了一个半月左右的「喵呜天气」终于在今天下午成功提交到应用商店(腾讯应用宝).期间遇到两个小问题,记录如下 ...

最新文章

  1. cd: mkdir: rmdir: rm
  2. Angularjs中文教程
  3. 解决在thinkphp5.0中用ajax访问后台控制器方法时,返回的数据显示不出来
  4. EasyUI datagrid 分页保持选中状态
  5. 云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server
  6. 解决模拟MOSS用户调用WebService打开个人站点进行操作
  7. 13 CO配置-控制-内部订单-定义定单类型
  8. 微信公众平台开发(150)——从新浪云SAE上传图片到图文消息
  9. C#获取上传文件的扩展名
  10. BP神经网络模型与学习算法
  11. 【笔记篇】01初识供应链——之《实战供应链》
  12. 联想xiaoxin700-15isk黑苹果clover分享
  13. python mkl 锐龙 cpu_Matlab 升级适配 AMD 锐龙,满血性能轻松提升 60%
  14. 三、三个路由器间的互联
  15. notepad++格式化xml文件
  16. 关于重装系统后没有以太网和wifi的问题解决
  17. ppp项目是什么意思?ppp模式是什么意思?PPP问题大全
  18. AVT Mako/Manta面阵相机开发小结
  19. 制作启动盘(带数据,不用格式化)
  20. sqlserver数据库导入

热门文章

  1. k3note Android8,增强用户体验 八款高品质音乐手机推荐
  2. win10能装文件服务器吗,win2003图文详解文件服务器的安装步骤
  3. ios xcode11 Embedded Binaries添加动态库
  4. 操作型数据库(OLTP) VS 分析型数据库(OLAP)
  5. java技术大牛修炼记4-华为超级技术大牛的十年经验总结
  6. 蓝桥杯模拟赛-算年龄
  7. html快闪软件制作,快闪视频制作方法
  8. 弘辽科技:淘宝宝贝如何修改库存?会影响权重吗?
  9. 添加 wappalyzer浏览器插件
  10. C++ Primer- 变量声明和定义的关系