@
目錄
- 1.環境搭建
- 1.1 換源
- 1.2 安裝wheel
- 1.3 安裝twine
- 1.4 註冊PyPI賬號
- 2.編寫setup.py
- 2.1 專案檔案樹
- 2.2 編寫setup.py檔案
- 3.構建
- 4.上傳
- ERROR:The user 'XXX' isn't allowed to upload to project ''
- 2024.1.19更新:
1.環境搭建
1.1 換源
- 在pip安裝時使用
-i
引數,可以指定源。以下有許多種國內源可以選擇
https://pypi.tuna.tsinghua.edu.cn/simple
http://mirrors.aliyun.com/pypi/simple/
https://pypi.mirrors.ustc.edu.cn/simple/
http://pypi.hustunique.com/
http://pypi.sdutlinux.org/
http://pypi.douban.com/simple/
1.2 安裝wheel
pip install wheel -i https://pypi.tuna.tsinghua.edu.cn/simple
1.3 安裝twine
pip install twine -i https://pypi.tuna.tsinghua.edu.cn/simple
1.4 註冊PyPI賬號
去此網址註冊一個即可
2.編寫setup.py
2.1 專案檔案樹
- 你的專案可能是這樣的...
xu736946693@ubuntu:~/Desktop/python-template$ tree
.
├── bin
│ └── start.py
├── conf
│ └── yourfile.conf
├── dataBase
│ └── yourDB
├── docs
│ └── introduction.md
├── lib
│ └── yourlib.py
├── LICENSE
├── log
│ └── version.md
├── package_name
│ ├── __init__.py
│ └── module1
│ └── __init__.py
├── README.md
├── res
│ ├── READMEimgRes
│ │ ├── 7ac23192b1904eb790272d8462cec5b8.png
│ │ └── d919d615def3466f9ff73488c4e62aac.png
│ └── yourResource
│ └── resourceFile
├── settings.zip
├── setup.py
└── tests
└── test.py
12 directories, 16 files
2.2 編寫setup.py檔案
setup.py檔案是用來打包和上傳你的包的重要檔案,它有固定的編寫正規化。下面我將給出我的demo並附上詳細註釋。
from setuptools import setup, find_packages
from os import path
this_directory = path.abspath(path.dirname(__file__))
with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
my_long_description = f.read()
setup(
# 關於classifiers的描述詳見如下
# https://pypi.org/search/?q=&o=&c=Topic+%3A%3A+Software+Development+%3A%3A+Build+Tools
classifiers=[
# 屬於什麼型別
"Topic :: Software Development :: Libraries :: Python Modules",
# 發展時期,常見的如下
# Development Status:: 1 - Planning
# Development Status:: 2 - Pre - Alpha
# Development Status:: 3 - Alpha
# Development Status:: 4 - Beta
# Development Status:: 5 - Production / Stable
# Development Status:: 6 - Mature
# Development Status:: 7 - Inactive
"Development Status :: 4 - Beta",
# 許可證資訊
"License :: OSI Approved :: MIT License",
# 目標程式語言
# Programming Language :: C
# Programming Language :: C++
# Programming Language :: Python :: 3.4
# Programming Language :: Python :: 3.5
# Programming Language :: Python :: 3.6
# Programming Language :: Python :: 3.7
# Programming Language :: Python :: 3.8
# Programming Language :: Python :: 3.9
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
# 執行的作業系統
# "Operating System :: POSIX :: Linux",
"Operating System :: Microsoft :: Windows",
# 執行的環境
# "Environment :: GPU :: NVIDIA CUDA :: 12",
# 開發的目標使用者
# Intended Audience :: Customer Service
# Intended Audience :: Developers
# Intended Audience :: Education
# ...
# Intended Audience :: End Users/Desktop
# Intended Audience :: Financial and Insurance Industry
# Intended Audience :: Healthcare Industry
"Intended Audience :: End Users/Desktop",
# 自然語言
"Natural Language :: English",
"Natural Language :: Chinese (Simplified)",
],
# 如果上傳時出現ERROR:The user '' isn't allowed to upload to project '',換個名字,長一點無所謂,不能跟別人重複
name="projectTemplate",
version="1.0.0",
author="Han Xu",
author_email="736946693@qq.com",
description="This is a project template.",
long_description=my_long_description,
# 存放原始碼的地址,填入gitee的原始碼網址即可
# url="https://gitee.com/UnderTurrets/",
packages=find_packages(),
# README.md文字的格式,如果希望使用markdown語言就需要下面這句話
long_description_content_type="text/markdown",
# 安裝過程中,需要安裝的靜態檔案,如配置檔案、service檔案、圖片等
# data_files=[
# ("", ["conf/*.conf"]),
# ("/usr/lib/systemd/system", ["bin/*.service"]),
# ],
# 希望被打包的檔案
# package_data={
# "":["*.txt"],
# "bandwidth_reporter":["*.txt"]
# },
# 不打包某些檔案
# exclude_package_data={
# "bandwidth_reporter":["*.txt"]
# },
# 表明當前模組依賴哪些包,若環境中沒有,則會從pypi中下載安裝
# install_requires=["requests",],
# setup.py 本身要依賴的包,這通常是為一些setuptools的外掛準備的配置
# 這裡列出的包,不會自動安裝。
# setup_requires=["",],
# 僅在測試時需要使用的依賴,在正常釋出的程式碼中是沒有用的。
# 在執行python setup.py test時,可以自動安裝這三個庫,確保測試的正常執行。
# tests_require=[
# "",
# ],
# install_requires 在安裝模組時會自動安裝依賴包
# 而 extras_require 不會,這裡僅表示該模組會依賴這些包
# 但是這些包通常不會使用到,只有當你深度使用模組時,才會用到,這裡需要你手動安裝
# extras_require={
# "": [""],
# },
)
- 根據自己的需要更改即可
3.構建
- 在專案空間下執行如下指令:
python setup.py sdist bdist_wheel
- 可以看到專案下會自動生成build目錄和lib目錄等:
xu736946693@ubuntu:~/Desktop/python-template$ tree -L 3
.
├── bin
│ └── start.py
├── build
│ ├── bdist.linux-x86_64
│ └── lib
│ └── package_name
├── conf
│ └── yourfile.conf
├── dataBase
│ └── yourDB
├── dist
│ ├── projectTemplate-1.0.0-py3-none-any.whl
│ └── projectTemplate-1.0.0.tar.gz
├── docs
│ └── introduction.md
├── lib
│ └── yourlib.py
├── LICENSE
├── log
│ └── version.md
├── package_name
│ ├── __init__.py
│ └── module1
│ └── __init__.py
├── projectTemplate.egg-info
│ ├── dependency_links.txt
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ └── top_level.txt
├── README.md
├── res
│ ├── READMEimgRes
│ │ ├── 7ac23192b1904eb790272d8462cec5b8.png
│ │ └── d919d615def3466f9ff73488c4e62aac.png
│ └── yourResource
│ └── resourceFile
├── settings.zip
├── setup.py
└── tests
└── test.py
4.上傳
- 在專案空間下執行如下指令:
twine upload -u <the usrname of your PyPI account> -p <the password of your PyPI account> dist/<the files you want to upload>
- 如果你更新了程式碼,記得更新setup.py中的版本號,重新構建你的程式碼,再次上傳就好了。
ERROR:The user 'XXX' isn't allowed to upload to project ''
- 你的軟體包名字是PyPI用以區分的唯一標識,因此必須全球唯一
如果上傳時出現ERROR:The user 'XXX' isn't allowed to upload to project '',換個名字,長一點無所謂,不能跟別人重複。
2024.1.19更新:
目前PyPI官方強制要求兩步驗證,同時關閉了在終端中輸入賬密上傳包的方式。目前需要在賬戶中設定API才可以上傳。
- 設定API
- 在家目錄建立
.pypirc
檔案。對於windows使用者,即'C:\Users\<Your name>\.pypirc
。對於Linux使用者,即'~\.pypirc
。 - twine上傳
twine upload dist/*
本文由部落格一文多發平臺 OpenWrite 釋出!