Python 发布自己的包、项目到PyPI私服

Python 发布自己的包到PyPI私服

1 项目结构

整理代码的目录结构,方便打包和python的import,为了方便引用,需要将代码模块变成一个包,所以需要将功能代码用目录来整合方便引用,并且需要创建__init__文件,__init__中可以没有内容

Python 发布自己的包、项目到PyPI私服_第1张图片

图中红框中为我们所需要的文件,其中第一个红框中的parser_code为项目文件,另一个红框中的三个文件是需要我们自己进行配置、编写的,其中requirements.txt声明项目所需要的python第三方库,README.md解释此项目的使用方法。

parser_code项目文件的结构如下图:

Python 发布自己的包、项目到PyPI私服_第2张图片

其中metadata文件内为项目需要的数据库配置文件“\shared\mysql_config.json“。

详细结构如下:

cost_parser/
	parser_code/
    	metadata/
        	shared/
            	mysql_config.json
        __init__.py
        bucketing.py
        category.py
        category_mysql.py
        constants.py
        controller.py
        itemparser.py
        normalizer.py
        parser_lib.py
        patternparser.py
        pre_processor.py
        test_main.py
        testcase.py
        util.py
	README.md
    requirements.txt
    setup.py

2 编写setup.py

setup.py是放在你包的根目录的,这一步至关重要,包括要发布的包名字,版本,license,描述,特性(classifier)等等。

from os import path as os_path
from setuptools import setup, find_packages

this_directory = os_path.abspath(os_path.dirname(__file__))

# 读取文件内容
def read_file(filename):
    with open(os_path.join(this_directory, filename), encoding='utf-8') as f:
        long_description = f.read()
    return long_description

# 获取依赖
def read_requirements(filename):
    return [line.strip() for line in read_file(filename).splitlines()
            if not line.startswith('#')]

setup(
    name='parsercode',  # 包名
    python_requires='>=3.4.0',  # python环境
    version='1.0.6',  # 包的版本
    description="Test publish own pypi.",  # 包简介,显示在PyPI上
    long_description=read_file('README.md'),  # 读取的Readme文档内容
    long_description_content_type="text/markdown",  # 指定包文档格式为markdown
    author="petzhang",  # 作者相关信息
    author_email='[email protected]',
    url='http://geek.glodon.com/projects/BIGDATA/repos/cost_parser/browse',
    # 指定包信息,还可以用find_packages()函数
    packages=['parser_code'],
    package_data = {
        'parser_code': ['metadata/shared/*.json']
    },#读取需要的数据文件
    install_requires=[
        'numpy',
        'pandas',
        'pymysql',
    ],  # 指定需要安装的依赖
    include_package_data=True,
    license="MIT",
    keywords=['parser_code'],
    classifiers=[
        'Intended Audience :: Developers',
        'License :: OSI Approved :: MIT License',
        'Natural Language :: English',
        'Programming Language :: Python',
        'Programming Language :: Python :: Implementation',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
        'Topic :: Utilities'
    ],
)

3 配置私服环境(.pypirc文件)

.pypirc文件一般放在‘C:\Users\用户明’的目录下

[distutils]
index-servers = local
[local]
repository: https://packages.glodon.com/artifactory/api/pypi/PyPI-AIplatform-open
username: zhanghc
password: password

4 打包上传项目

校验setup.py文件是否正确:(一般返回‘running check’,即没问题)

张华超@DESKTOP-5QA47CC MINGW64 /d/git_chendian/cost_parser (petzhang)
$ python setup.py check
running check

上传

张华超@DESKTOP-5QA47CC MINGW64 /d/git_chendian/cost_parser (petzhang)
$ python setup.py sdist bdist_wheel upload -r local

执行成功后会得到如下三个文件:

在这里插入图片描述

此时,私服上已经有了我们所上传的第三方库

Python 发布自己的包、项目到PyPI私服_第3张图片

5 下载验证

#执行如下命令进行安装
C:\Users\张华超>python -m pip install parsercode -i  https://packages.glodon.com/artifactory/api/pypi/PyPI-AIplatform-open/simple&username=zhanghc&password='域密码'

在python中导入验证

Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.

#导入模块
>>> from parser_code import test_main

'''
因为test_main.testOneline函数有以下六个参数:
mtype,dbid, item_code, meta_path, specname, spec
除了meta_path,其他的都为数据,meta_path找到自己本地"metadata"的目录
例如我本地的目录为“D:\软件\python3.7\Lib\site-packages\parser_code\metadata”
'''
>>> test_main.testOneline('DB','1710','031001001','D:\软件\python3.7\Lib\site-packages\parser_code\metadata','穿楼板套管','1.名称:穿楼板套管፨2.规格型号:DN100')

#运行结果如下
{'Release Version': '20200314', 'Release Date': '2020-03-14'} MetaData:mysql , DBID: 1710 , CHAPTER: 0310
DB connection is closed.
spec:  穿楼板套管;1.名称:穿楼板套管፨2.规格型号:DN100
########## result: 
压力试验:
吹洗及吹扫设计要求:
安装部位:
管道材质:{管道材质(0310_管道材质):穿楼板套管} 
规格(公称直径):{公称直径(公称直径):dn100} 
输送介质:
连接形式:
除锈、刷油、防腐处理:
未能分出类别的值:{}
……

你可能感兴趣的:(Python 发布自己的包、项目到PyPI私服)