python - 发布自己的模块(脚本) 到pypi.org
// 参考链接们
// 可能遇到的问题们
400 - file already exists
上传时候指定版本号
499 - client disconnected
网络问题,多试几次
403 - isn't allowed to upload to project
改个包名试一试
更多问题还请多搜索搜索
// 预先的环境
#1.安装好python3,pip #2.安装wheel pip install wheel #否则会出现invalid command 'bdist_wheel #3.安装twine pip install twine #上传包到pypi用的 #4.注册pypi.org账号,并验证邮箱 #4.配置~/.pypirc文件,~对应linux用户home目录,windows用户C:\Users\账户名,内容用下面折叠的代码

[distutils] index-servers=pypi [pypi] repository=https://upload.pypi.org/legacy/ username= password=
// 提示
1.看官方文档如果能解决问题,就不要看这篇笔记,这里面是个人理解,可能有偏差。
2.setup.py,中的setup函数的每个参数在官方文档里面都有说明,setup(name="",这个name就是你的模块(脚本)的package-name,这个不能重复,否则无法上传。
3.除了官方文档,通过python交互模式help("setuptools.setup"), help("setuptools.find_packages")也能获取一点的帮助。
4.在预先环境中的.pypirc文件中我并没有写下我的pypi.org账号密码,而是在上传的时候手动指定的。
5.下面demo中的setup.py中的entry_points的console_scripts是指定安装自己的包后,在控制台输入命令执行什么代码,我的是'just-rename = lhnrenamer.rename:main',就是在cmd中运行just-rename就运行包lhnrenamer下rename文件的main函数。
6.重申一遍,我这个demo中setup.py,setup(name="just-rename", just-rename是我上传到pypi.org的包名,和我实际代码中的模块(package)名称lhnrenamer不一致没关系,应为just-rename下可能有很多类似lhnrename这个的package.
7.更新代码后几点更新版本号,重新构建并上传,twine上传的时候指定好文件的版本号。
// demo
2.文件路径截图
3.rename.py

import os import re import sys # 遍历文件夹 def walkFile(workdir,pattern,replacement): for dirpath, dirnames, filenames in os.walk(os.path.realpath(workdir)): # 遍历文件 for f in filenames: doRename(workdir,f,pattern,replacement) # 执行重命名 def doRename(workdir,filename,pattern,replaceMent): workdir = os.path.realpath(workdir) matcies = re.search(pattern, filename, flags=0) print("<= " + os.path.join(workdir, filename)) if matcies: newFileName = re.sub(pattern, replaceMent, filename, count=0, flags=0) old_name = os.path.join(workdir, filename) new_name = os.path.join(workdir, newFileName) print("=> " + old_name + "\t--->\t"+ new_name) os.rename(old_name,new_name) else: print("no match") def main(): if(len(sys.argv) < 4): print("just-rename <workdir> <pattern> <replacement>") return workdir = sys.argv[1] pattern = sys.argv[2] replacement = sys.argv[3] print("--"*10) print("workdir:\t"+workdir) print("pattern:\t"+pattern) print("replacement:\t"+replacement) print("--"*10) walkFile(workdir,pattern,replacement) if __name__ == '__main__': main()
4.setup.py

# -*- coding: utf-8 -*- from setuptools import setup, find_packages with open("README.md", "r", encoding="utf-8") as fh: long_description = fh.read() # with open('requirements.txt', "r", encoding="utf-8") as f: # requires = f.read().splitlines() setup( name = "just-rename", packages = find_packages(where='.'), version = "1.0.3", entry_points = { "console_scripts": [ 'just-rename = lhnrenamer.rename:main' ] }, description = "just-rename, batch rename filenames, all scripts will be written with Python3", author = "lhnonline", author_email = "0376lhn@gmail.com", license = "GPLv3", url = "http://github.com/lhnonline/renamer", # install_requires = requires, include_package_data = True, zip_safe=True, exclude_package_data = {'': ['__pycache__']}, # download_url = "", keywords = [ "renamer", "batch rename filenames with regex support", "just-rename"], classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3" , "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent" ], long_description = long_description, long_description_content_type="text/markdown", )
5.准备好代码
6.构建你的代码(请确保你的setup.py中的name,你的包名未被使用,否则上传的时候会提示 The user '你的账户名称' isn't allowed to upload to project '你的setup中name的值,这个值被人用了' )
python setup.py sdist bdist_wheel
7.上传你的代码
twine upload -u 你的pypi用户名 -p 你的pypi密码 dist/你要上传的文件 #如果你更新了代码,记得更新setup.py中的版本号,重新构建你的代码,再次上传就好了。
8.通过pip 就可以安装了
pip install just-rename # 如果有更新可以更新 pip install just-rename --upgrade # 也可以无情的删除 pip uninstall just-rename
9.也可到pipy.org看看
// last but not least
1. 如何给模块加上文档,还不会。。。
2.如果恰好你也需要批量给文件改名,可以pip install just-rename试一试。