python私有pypi库搭建
字数统计:
626字
|
阅读时长:
3分
一般公司使用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 --- 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
再将项目进行打包
还需要配置poetry的认证信息
1 $ poetry config http-basic.pypi-server admin admin
然后使用poetry上传包
1 $ poetry publish -r pypi-server