我们正在使用一个内部托管的PyPI服务器(devpi-server
),以便我们可以托管大型软件包的二进制轮子,这些软件包需要很长时间才能从scipy,matplotlib等源代码安装.安装这些软件包时,pip install scipy
工作完美,绝对使用我们的轮子创造了.但是,使用任何内部开发的python包,这些包依赖于其中一个包并运行会python setup.py install|develop|test|whatever
导致以下错误:
No local packages or download links found for scipy
Traceback (most recent call last):
File "setup.py", line 136, in <module>
'develop': DevelopCommand
File "/usr/local/lib/python2.7/distutils/core.py", line 112, in setup
_setup_distribution = dist = klass(attrs)
File "/users/me/virtualenvs/devpi-test/lib/python2.7/site-packages/setuptools/dist.py", line 239, in __init__
self.fetch_build_eggs(attrs.pop('setup_requires'))
File "/users/me/virtualenvs/devpi-test/lib/python2.7/site-packages/setuptools/dist.py", line 263, in fetch_build_eggs
parse_requirements(requires), installer=self.fetch_build_egg
File "/users/me/virtualenvs/devpi-test/lib/python2.7/site-packages/pkg_resources.py", line 564, in resolve
dist = best[req.key] = env.best_match(req, self, installer)
File "/users/me/virtualenvs/devpi-test/lib/python2.7/site-packages/pkg_resources.py", line 802, in best_match
return self.obtain(req, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我只能连接外部硬盘驱动器的服务器上使用 pip 搜索功能制作一个完整的本地 Pypi 存储库镜像。明确地说,我不想要一个简单的缓存系统,服务器连接到一个完全封闭的网络中的其他机器,根本无法访问互联网。
到目前为止,我所做的是使用 bandersnatch 转储每个 pypi 包,并且我可以在它前面使用一个简单的 http 服务器进行 pip 安装。我还检索了 pypi 遗留源代码,并让它在没有任何 python 包的情况下工作。我现在遇到的问题是将双方联系起来,我什至不确定是否可以这样做。
我还测试了pypiserver。它本可以做我想做的,但它太慢了,最终导致 pip search 抛出超时(看起来它不是为处理那么多包而构建的)。
最后,我看了一下devpi。似乎可以很好地完成我想做的工作,但我正在寻找一种方法来轻松地将我的 bandersnatch 转储导入其中。看起来我无法基于本地目录创建索引。
感谢您的任何回应。
我正在尝试使用 docker build 为基于 Flask 的 Web 应用程序构建图像。我的 Dockerfile 如下所示:
FROM beehive-webstack:latest
MAINTAINER Anuvrat Parashar <anuvrat@zopper.com>
EXPOSE 5000
ADD . /srv/beehive/
RUN pip install -i http://localhost:4040/root/pypi/+simple/ -r /srv/beehive/requirements.txt
Run Code Online (Sandbox Code Playgroud)
不带 -i 标志的 pip install 可以工作,但它会从 pypi 下载所有内容,这自然很慢。
问题是 pip 无法访问我笔记本电脑上运行的 devpi 服务器。我怎样才能实现这一目标?
在这里有一个简短的问题,习惯于devpi,并且想知道devpi和pypi服务器之间有什么区别?
比另一个更好?这一个量表哪个更好?
干杯
我正在开发包并将包的开发/测试/等版本上传到本地 devpi 服务器。
为了防止意外上传到PyPi,我采用了以下常见做法:
setup(...,
classifiers=[
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Private :: Do not Upload"
],
...)
Run Code Online (Sandbox Code Playgroud)
效果很好,但是当我最终准备好将包上传到 PyPi 时呢?
我想出了一个完全丑陋但简单的技巧,它要求我将分类器定义为 setup() 调用之外的全局变量,如下所示:
CLASSIFIERS = [
"Programming Language :: Python",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7"
]
if "--public" not in sys.argv:
CLASSIFIERS.append("Private :: Do Not Upload")
else:
sys.argv.remove("--public")
setup(...
classifiers=CLASSIFIERS,
...)
Run Code Online (Sandbox Code Playgroud)
另一个也许更简单的选择是仅仅注释掉“私人::请勿上传”,但这似乎并不比我的黑客更专业。
我想做的是创建一个名为的上传命令的适当子类SafeUpload
,并让它检查--public
cmd-line 选项。也许,由于在上传之前可能存在构建,因此SafeBuild …
我可以pip
使用私有本地devpi
服务器通过安装软件包。相应的配置为:
[global]
index_url = http://mydevpi.mine/root/pypi/+simple/
[search]
index = http://mydevpi.mine/root/pypi/
[install]
trusted-host = mydevpi.mine
Run Code Online (Sandbox Code Playgroud)
使用以下命令进行安装pip
非常简单:
pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
但是,这样做pipenv
似乎并不起作用。这有效,但未使用我的本地devpi
:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
Run Code Online (Sandbox Code Playgroud)
这不起作用:
[[source]]
url = "http://devpi.dgv/root/pypi/+simple/"
verify_ssl = true
name = "pypi"
Run Code Online (Sandbox Code Playgroud)
我该如何告诉我pipenv
使用其他网址pypi
?
我正在使用 Python devpi服务器,当我创建索引时,它添加了一个默认设置acl_toxresult_upload=:ANONYMOUS:
,但我不知道它的含义。
当我在 Web 界面中查看索引时,它显示:
permissions
toxresult_upload
Special: ANONYMOUS
upload
Users: my-user
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了它,但找不到它的含义的任何解释。我唯一能找到的是一个python 测试,它表明它与上传测试有关,但我不确定这对 Pypi 索引意味着什么。
# anonymous may upload tests
assert with_user(permissionrequest, None).has_permission(
'toxresult_upload', StageACL(stage, False))
Run Code Online (Sandbox Code Playgroud) 为了避免在两个地方指定依赖项,我有一个Python项目,其setup.py解析一个requirements.txt文件以生成install_requires包列表.这很好用,直到我尝试将一个轮子上传到一个devpi服务器然后安装它 - 我得到的错误是找不到requirements.txt.
是否可以使用setup.py旁边的requirements.txt文件构建分发?我已经尝试过package_data和data_files,但生成的发行版仍然没有包含这些文件.
是否可以使用“pip wheel”将 Linux 上的二进制轮上传到本地 devpi 服务器?或者我是否需要访问 setup.py 并从那里上传?在不需要 setup.py 的情况下构建轮子(它在幕后处理),只需要一个 setup.py 来上传结果,这似乎是一种耻辱。
这让我想知道:C 扩展 PyPI 目前只允许为 Windows 和 Mac OS X 上传特定于平台的轮子。为这些平台创建轮子仍然很有用,因为它避免了用户在安装时编译包的需要。
我正在做“pip -v -v -v wheel numpy”(例如),我有一个 pip.conf 和 .pypirc (都指向我们本地的 devpi)。
谢谢!
devpi ×9
python ×8
pip ×4
pypi ×4
python-wheel ×3
setuptools ×2
docker ×1
pipenv ×1
pypiserver ×1