超级新手问题在这里..
pip install 实际上是做什么的?
假设 pypi 包是一个压缩包......
它只是下载 tar.gz,解压并运行 setup.py 吗?
它是否将下载的包添加到 site_packages 文件夹?
我想使用 pypiserver 创建一个 pip 可安装的 pkg,这样我的同事就可以轻松下载我的 pkg,但我有点不确定在实际的 .py 脚本之外到底要包含什么。
任何指导将不胜感激
我正在尝试在我只能连接外部硬盘驱动器的服务器上使用 pip 搜索功能制作一个完整的本地 Pypi 存储库镜像。明确地说,我不想要一个简单的缓存系统,服务器连接到一个完全封闭的网络中的其他机器,根本无法访问互联网。
到目前为止,我所做的是使用 bandersnatch 转储每个 pypi 包,并且我可以在它前面使用一个简单的 http 服务器进行 pip 安装。我还检索了 pypi 遗留源代码,并让它在没有任何 python 包的情况下工作。我现在遇到的问题是将双方联系起来,我什至不确定是否可以这样做。
我还测试了pypiserver。它本可以做我想做的,但它太慢了,最终导致 pip search 抛出超时(看起来它不是为处理那么多包而构建的)。
最后,我看了一下devpi。似乎可以很好地完成我想做的工作,但我正在寻找一种方法来轻松地将我的 bandersnatch 转储导入其中。看起来我无法基于本地目录创建索引。
感谢您的任何回应。
我有一堆与互联网隔离的机器,并且只能访问本地网络上的某些服务。
我希望使用这些机器的用户能够从本地 pypi 服务器搜索和安装他们想要的任何 python 库。因此,我在 /etc/ 下创建了一个全局 pip.conf,其中包含以下几行:
[global]
trusted-host = my.pypi-server.com
index-url = https://my.pypi-server.com/
Run Code Online (Sandbox Code Playgroud)
当库的名称已知并且您只需运行pip install fancy-lib
. 但是,在搜索包时,pip 似乎忽略了 index-url:
$ pip search fancy-lib -vvvv
Starting new HTTPS connection (1): pypi.python.org
$ pip install fancy-lib -vvvv
Collecting fancy-lib
1 location(s) to search for versions of fancy-lib:
* https://my.pypi-server.com/simple/fancy-lib
Getting page https://my.pypi-server.com/simple/fancy-lib
Looking up "https://my.pypi-server.com/simple/fancy-lib" in the cache
No cache entry available
Starting new HTTPS connection (1): https://my.pypi-server.com/
Run Code Online (Sandbox Code Playgroud)
如何pip search
使用本地 pypi 服务器?
我使用以下命令创建了本地 pypi 服务器
\ndocker run -p 5151:8080 -v ~/.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest -P .htpasswd packages\n
Run Code Online (Sandbox Code Playgroud)\n然而,当我尝试使用诗歌上传我的包时,我得到:
\npoetry publish -r myrepo\n\n\nPublishing mypack (0.1.0) to myrepo\n - Uploading mypack-0.1.0-py3-none-any.whl 100%\n\n UploadError\n\n HTTP Error 405: Method Not Allowed\n\n at ~/.poetry/lib/poetry/publishing/uploader.py:216 in _upload\n 212\xe2\x94\x82 self._register(session, url)\n 213\xe2\x94\x82 except HTTPError as e:\n 214\xe2\x94\x82 raise UploadError(e)\n 215\xe2\x94\x82 \n \xe2\x86\x92 216\xe2\x94\x82 raise UploadError(e)\n 217\xe2\x94\x82 \n 218\xe2\x94\x82 def _do_upload(\n
Run Code Online (Sandbox Code Playgroud)\n我将本地存储库定义如下:
\n诗歌配置 repositories.myrepo http://localhost:5151/simple
\n和
\n诗歌配置 http-basic.myrepo 用户密码
\n我错过了什么?
\n我们目前正在运行我们自己的私有 PyPi 服务器,并上传我们内部 Python 库的轮子以加快安装速度。
我们的许多工具都需要 numpy、scipy、pandas 等。
通过从源代码安装所有依赖项,然后使用,我们为所有依赖项构建了轮子
pip wheel .
Run Code Online (Sandbox Code Playgroud)
它为我们所有的依赖项输出轮子 - 或者我们是这么认为的。
我们发现,当我们从我们的私有 PyPi 安装 numpy 时,它可以作为轮子使用,会发生以下情况。
>>> import numpy
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "redacted/lib/python2.7/site-packages/numpy/__init__.py", line 199, in <module>
from . import random
File "redacted/site-packages/numpy/random/__init__.py", line 99, in <module>
from .mtrand import *
ImportError: redacted/lib/python2.7/site-packages/numpy/random/mtrand.so: undefined symbol: PyFPE_jbuf
Run Code Online (Sandbox Code Playgroud)
我很清楚这些轮子没有正确创建。我不清楚的是如何解决这个问题。我们不会将这些分发给公众,仅用于我们的内部工具。
我在一个由Python开发人员组成的小团队中工作,我们的目标是创建一个私有的包管理器来存储我们的包.我来到了pypicloud,按照它的教程,我已经成功地上传并安装了存储在AWS-S3中的软件包.这太妙了.
但是,私有包管理器在本地启动并托管pserve server.ini
在终端中.然后可以访问包管理器http://0.0.0.0:6543/#/
.理想情况下,我希望此服务器为:
问题:如何在云中始终启动并运行安全的私有服务器(python包管理器)?
我有一个使用 https 设置的个人 Python 存储库,我可以使用以下命令上传到它:
twine upload <dist> -r <my_server> --cert <path/to/certfile>
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够上传而无需显式指定 CA 证书位置。我相信我已将 CA 证书安装在系统的正确位置(使用 如何在 centos7 中添加证书颁发机构?作为指导,并使用 wget 进行验证),但我仍然需要调用原始路径。
如何让 twine 默认使用我的备用 CA 证书?
我已经在 kubernetes 集群中创建了 pypiserver,我使用了https://hub.docker.com/r/pypiserver/pypiserver docker 镜像。我需要为我创建的服务器创建基本身份验证。我使用了这种方法https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: pypiserver
labels:
app: pypiserver
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: 'true'
ingress.kubernetes.io/auth-type: basic
ingress.kubernetes.io/auth-secret: secret
ingress.kubernetes.io/auth-realm: "Authentication Required - ok"
spec:
rules:
- host: example.com
http:
paths:
- path: /
backend:
serviceName: pypiservice
servicePort: 8080
tls:
- hosts:
- example.com
secretName: secret-tls
Run Code Online (Sandbox Code Playgroud)
但我的主机名是“www.example.com/8080”,并且我没有看到 ingress 在 kubernetes 集群中有任何 pod。Ingress 运行良好,但我没有获得该主机的身份验证。(而且我还有http://IP地址:8080,我通过cloudflare将其转换为域名)
请让我知道我做错了什么?
我正在使用 ubuntu,我已经创建了一个 python 包,它已经准备好在 PyPI 上注册,但是当我使用python setup.py register
它时显示如下错误:
Server response (410): This API is no longer supported, instead simply upload the file.
Run Code Online (Sandbox Code Playgroud)
我知道这是找不到 .pypirc 文件的错误,但我不知道如何解决这个问题,因为我家没有 .pypirc 文件。我们不能创建 pypirc 文件吗?(只是问一下)。当我在 virtualenv 中使用 register 命令时也有一个不同的错误,我得到这个:
Server response (410): Gone (This API has been deprecated and removed from legacy PyPI in favor of using the APIs available in the new PyPI.org implementation of PyPI (located at https://pypi.org/). For more information about migrating your use of this API to PyPI.org, please see …
Run Code Online (Sandbox Code Playgroud) pypiserver ×9
python ×7
pypi ×5
pip ×3
azure ×1
centos7 ×1
devpi ×1
docker ×1
numpy ×1
package ×1
python-3.x ×1
python-wheel ×1
twine ×1
ubuntu ×1