python打包成sdk上传到私有仓库和使用

我们已经学习了如何运行一个python项目(当我们有它的源码文件py文件的时候)。

python的使用和运行

我们有一个项目,需要打包到其他机器上运行,如果每次都是复制整个项目源码就显得有点笨拙。

实现这个需求有很多种方案。

例如:
PyInstaller 可参考链接:https://ningyu1.github.io/site/post/59-py2exe-pyinstaller/

我们这里还是使用比较好用的poetry包管理工具来实现 打包和下载运行。

我们已经在学习了poetry的基本介绍

Python依赖管理和打包工具poetry

以及记录如何实现打包、上传和运行

pyproject.toml 示例

[tool.poetry]
name = "qc-module"
version = "1.0.0"
description = ""
authors = ["joe "]

[tool.poetry.dependencies]
python = "^3.7"
pyhocon = "^0.3.48"


[tool.poetry.dev-dependencies]
pytest = "^3.8"
pytest-cov = "^2.6"
pytest-testdox = "^1.0"

[[tool.poetry.source]]
name = "mypypi"
url = "https://www.mypypi.com/repository/mypypi-group/simple/"


[tool.poetry.scripts]
start = 'qc_module:init'

https://www.mypypi.com/repository/mypypi-group/simple/ 为搭建的pip仓库。

[tool.poetry.scripts]
start = 'qc_module:init'

含义是 在终端使用start命令 会运行qc_module的

__init__.py 

文件。
(前提是安装有poetry)

init.py文件内容为

import os
import sys
import time

from qc_module.main import *


def init():
    """
    module的主函数,也是唯一的module入口
    :return:
    """
    print("Start : %s" % time.ctime())
    print("End : %s" % time.ctime())


if __name__ == '__main__':
    init()

打包

python setup.py dist bdist_wheel
或 
poetry build

配置 nexus

在 ~/.pypirc 里配置以下内容

[distutils]
index-servers =
    pypi
    nexus

[pypi]
repository:https://pypi.python.org/pypi
username:your_username
password:your_password


[nexus]
repository=https://www.mypypi.com/repository/mypypi
username=********
password=********

安装 twine

pip install twine

若已有则不用安装

上传

	twine upload -r nexus dist/sdk-0.0.1-********.whl

k8s中运行使用

Dockerfile的内容为


FROM python:3.7

WORKDIR /root

COPY dist/*.whl /root/

RUN pip install *.whl
或者
RUN pip install *.whl   -i https://www.mypypi.com/repository/mypypi-group/simple/

RUN pip install poetry

ENTRYPOINT [ "start" ]

linux系统中使用


RUN pip install *.whl

或者

pip install *.whl   -i https://www.mypypi.com/repository/mypypi-group/simple/

pip install poetry

start

这里start命令在windows系统中是关键词

所以也可以用其他的 命名(任意取名)

如下:

[tool.poetry.scripts]
runspider = 'my_package:main'
my-script = 'my_package:main'
start = 'qc_module:init'

运行时直接使用命令

my-script
或者
runspider

你可能感兴趣的:(python)