如何从带有pip的git子目录安装?

时间:2012-11-26 13:49:53

标签: python git pip

我有一个包含许多文件夹的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'

2 个答案:

答案 0 :(得分:78)

关于此功能有一个pull request,它似乎已经合并到一个月前开发分支。语法是following

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

我们可能需要等待一段时间才能合并到主人并分发。

更新:现在可以在https://pip.readthedocs.io/en/stable/reference/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放在双引号中,否则您将收到错误“'子目录'不被识别为内部或外部命令”。例如,使用:

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

答案 1 :(得分:12)

one of the comments中已经给出了正确答案,但这只是为了突出此问题:从Linux命令行执行此操作时,您必须转义&-字符,因为&符告诉命令行在后台运行命令:

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

请在与号前加反斜杠。转义行为可能取决于Linux发行版。我不是专家。
如果您忽略此设置,则可能会遇到类似以下的神秘错误:

bash: (...) command not found