我们已经学习了如何运行一个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 <[email protected]>"]
[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