..

python - 发布自己的模块(脚本) 到pypi.org

// 参考链接们

官方文档参考文档1,参考文档2,

// 可能遇到的问题们

 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=
View Code

// 提示

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

1.github-here

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()
View Code

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",
)
View Code

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试一试。

 

posted @ 2020-10-14 08:41  罗浩楠  阅读(464)  评论(0)    收藏  举报
..