python私有pypi库搭建

  |  

一般公司使用python开发的项目,都会有自己的私有pypi库,这样可以方便的管理自己的python包,也可以方便的管理自己的python包的版本,以及方便的管理自己的python包的依赖关系。

以下是搭建私有pypi库的步骤,以及使用私有pypi库的步骤。这里pypi库使用的是pypi-server,部署的方式是使用k8s部署的。

一、 搭建私有pypi库

首先配置资源配置清单,这里使用的是k8s的资源配置清单,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
apiVersion: v1
kind: Namespace
metadata:
name: pypi
---
apiVersion: v1
kind: Service
metadata:
name: pypi-server
namespace: pypi
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: http
selector:
app.kubernetes.io/name: pypi-server
app.kubernetes.io/instance: pypi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pypi-server
namespace: pypi
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
# 这里我的环境中有storageClassName: nfs-client,如果没有,需要注释掉,手动创建pv
storageClassName: nfs-client
---
apiVersion: v1
kind: Secret
metadata:
name: pypi-server
namespace: pypi
type: Opaque
stringData:
auth: "admin:admin"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: pypi-server
namespace: pypi
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: pypi-server
app.kubernetes.io/instance: pypi
template:
metadata:
labels:
app.kubernetes.io/name: pypi-server
app.kubernetes.io/instance: pypi
spec:
containers:
- name: pypi-server
image: pypiserver/pypiserver:v2.0.1
imagePullPolicy: IfNotPresent
command: [ "pypi-server" ]
args:
- --port=8080
- --passwords=/config/passwords
- --authenticate=list,update,download
- /data/packages
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 30
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 5
timeoutSeconds: 3
periodSeconds: 5
volumeMounts:
- name: packages
mountPath: /data/packages
- name: secrets
mountPath: /config
readOnly: true
volumes:
- name: packages
persistentVolumeClaim:
claimName: pypi-server
- name: secrets
secret:
secretName: pypi-server
defaultMode: 420
items:
- key: auth
path: passwords
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pypi-server
namespace: pypi
spec:
ingressClassName: nginx
rules:
- host: pypi-server.test.com
http:
paths:
- path: /
backend:
service:
name: pypi-server
port:
number: 8080
pathType: Prefix

然后使用kubectl创建资源

1
$ kubectl create -f pypi-server.yaml

创建完成后,可以使用kubectl查看资源状态

1
2
3
4
5
6
$ kubectl get all -n pypi
NAME READY STATUS RESTARTS AGE
pod/pypi-server-7f9f9f9f9f-7f9f9 1/1 Running 0 2m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/pypi-server ClusterIP

然后就可以使用浏览器访问http://pypi-server.test.com了,这里需要注意的是,这里的域名需要配置到本地的hosts文件中,否则无法访问。

二、 使用私有pypi库

上传包

这里我们上传下载都是使用的poetry,怎么使用poetry创建项目以及简单使用,可以参考python依赖管理和打包工具poetry

首先需要配置poetry的源

1
$ poetry source add pypi-server http://pypi-server.test.com --priority supplemental

再将项目进行打包

1
$ poetry build

还需要配置poetry的认证信息

1
$ poetry config http-basic.pypi-server admin admin

然后使用poetry上传包

1
$ poetry publish -r pypi-server
文章目录
  1. 1. 一、 搭建私有pypi库
  2. 2. 二、 使用私有pypi库
    1. 2.1. 上传包