在 install_requires 中使用 git 回购写入 setup.py 以检测已安装
Write setup.py using git repo in install_requires to detect already installed
我有一个依赖 git+ssh 的包,如下所示:
setup(
name="setuprequires",
version="0.1",
packages=["setuprequires"],
install_requires=[
r"hello-world @ git+ssh://git@github.com/hello/hello-world.git#egg=hello-world"
],
)
(我正在关注关于 git 回购依赖项的最新答案 。)
但是,如果我的当前环境中已经安装了 hello-world
,我想跳过安装。然而,如果我 运行 pip install -e .
两次,第二次仍然会克隆 hello-world
。相反,如果我刚刚使用 install_requires=[r"hello-world"]
,它会正确检测到这个要求已经得到满足。
在我看来 git+ssh
不能很好地检测已经满足的需求。我认为 #egg=hello-world
会解决这个问题。我错过了什么吗?
要检测存储库是最新的(或使用了某个提交),您需要先克隆它,因此即使它试图从缓存中获取缓存,您仍然首先需要存在缓存克隆它。
第一次克隆后,应该将其与现有的克隆存储库进行比较。
由于您没有指定任何提交,我猜它仍然因此而拉动。参见 Git._should_fetch()
class 方法。
相反,尝试指定要使用的 commit/tag,as mentioned in the docs,它应该开始缓存:
git+https://git.example.com/MyProject.git@<hash>#egg=MyProject
git+https://git.example.com/MyProject.git@<tag>#egg=MyProject
git+ssh://git.example.com/MyProject.git@<hash>#egg=MyProject
git+ssh://git.example.com/MyProject.git@<tag>#egg=MyProject
编辑:
我注意到,如果您使用分支,缓存就会被破坏。它不是 refs/...
,所以它不是显式的远程分支拉取,也不是哈希。然而,对于提交哈希,它可以完美地工作并将创建的轮子存储在 --cache-dir
目的地,然后在 pip install
命令的第二次+执行时选择该目的地。 (bug created)
示例:
from setuptools import setup
setup(
name="testing-git",
install_requires=[
# cached properly
"requests @ git+ssh://git@github.com/psf/requests.git@cd4762d5a3b56d8933d1d9c1dff365fc5db4c768#egg=requests-3.0"
# not cached
# "requests @ git+ssh://git@github.com/psf/requests.git@3.0#egg=requests-3.0"
]
)
我有一个依赖 git+ssh 的包,如下所示:
setup(
name="setuprequires",
version="0.1",
packages=["setuprequires"],
install_requires=[
r"hello-world @ git+ssh://git@github.com/hello/hello-world.git#egg=hello-world"
],
)
(我正在关注关于 git 回购依赖项的最新答案
但是,如果我的当前环境中已经安装了 hello-world
,我想跳过安装。然而,如果我 运行 pip install -e .
两次,第二次仍然会克隆 hello-world
。相反,如果我刚刚使用 install_requires=[r"hello-world"]
,它会正确检测到这个要求已经得到满足。
在我看来 git+ssh
不能很好地检测已经满足的需求。我认为 #egg=hello-world
会解决这个问题。我错过了什么吗?
要检测存储库是最新的(或使用了某个提交),您需要先克隆它,因此即使它试图从缓存中获取缓存,您仍然首先需要存在缓存克隆它。
第一次克隆后,应该将其与现有的克隆存储库进行比较。
由于您没有指定任何提交,我猜它仍然因此而拉动。参见 Git._should_fetch()
class 方法。
相反,尝试指定要使用的 commit/tag,as mentioned in the docs,它应该开始缓存:
git+https://git.example.com/MyProject.git@<hash>#egg=MyProject
git+https://git.example.com/MyProject.git@<tag>#egg=MyProject
git+ssh://git.example.com/MyProject.git@<hash>#egg=MyProject
git+ssh://git.example.com/MyProject.git@<tag>#egg=MyProject
编辑:
我注意到,如果您使用分支,缓存就会被破坏。它不是 refs/...
,所以它不是显式的远程分支拉取,也不是哈希。然而,对于提交哈希,它可以完美地工作并将创建的轮子存储在 --cache-dir
目的地,然后在 pip install
命令的第二次+执行时选择该目的地。 (bug created)
示例:
from setuptools import setup
setup(
name="testing-git",
install_requires=[
# cached properly
"requests @ git+ssh://git@github.com/psf/requests.git@cd4762d5a3b56d8933d1d9c1dff365fc5db4c768#egg=requests-3.0"
# not cached
# "requests @ git+ssh://git@github.com/psf/requests.git@3.0#egg=requests-3.0"
]
)