126

我有一个包含许多文件夹的 git 存储库,其中一个是可通过 pip 安装的 python 模块,如下所示:

repo.git/
repo.git/folder1/
repo.git/folder2/
repo.git/mymodule/
repo.git/mymodule/__init__.py
repo.git/mymodule/setup.py
repo.git/mymodule/...

现在我必须执行以下操作才能安装:

git clone http://server/repo.git
cd repo
pip install mymodule
cd ..
rm -rf repo

是否可以直接使用 pip 安装模块而无需显式克隆?

我试过:

pip install git+https://server/repo.git/mymodule/
pip install git+https://server/repo.git:mymodule/

但我得到:

IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'
4

2 回答 2

156

有一个关于此功能的拉取请求,它似乎已在一个月前合并到开发分支。语法如下

pip install -e git+https://git.repo/some_repo.git#egg=version_subpkg&subdirectory=repo # install a python package from a repo subdirectory

我们可能需要等待一段时间,直到它被合并到 master 并被分发。

更新:现在可以在https://pip.pypa.io/en/stable/cli/pip_install/#vcs-support获得并记录如下:

对于 setup.py 不在项目根目录中的项目,使用“子目录”组件。“子目录”组件的值应该是从项目根目录开始到 setup.py 所在位置的路径。

因此,如果您的存储库布局是:

- pkg_dir/
  - setup.py  # setup.py for package ``pkg``
  - some_module.py
- other_dir/
  - some_file
- some_other_file

你需要使用

pip install -e vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir

注意:在 Windows 上,您必须将 URL 放在双引号中,否则您将收到错误消息“'subdirectory' 无法识别为内部或外部命令”。例如,使用:

pip install -e "vcs+protocol://repo_url#egg=pkg&subdirectory=pkg_dir"
于 2013-10-22T11:33:43.043 回答
40

正确答案下的评论之一已经说明了这一点,但只是为了强调这个问题:从 Linux 命令行执行此操作时,您必须转义-&字符,因为 & 告诉命令行在后台运行命令:

git+https://git.repo/some_repo.git#egg=version_subpkg\&subdirectory=repo

注意&符号前的反斜杠。转义行为可能取决于 Linux 发行版;我不是专家。
如果您忽略这一点,您可能会遇到如下神秘错误:

bash: (...) command not found
于 2018-06-19T14:27:04.030 回答