我有一个Git仓库有很多文件夹,其中之一是一个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'
有一个拉请求,关于这个功能,它似乎已经合并到开发分支一个月前。 语法是如下 :
pip install -e git+https://git.repo/some_repo.git#egg=version_subpkg&subdirectory=repo # install a python package from a repo subdirectory
我们可能要等待一段时间,直到它被合并,以掌握和分布。
UPDATE:这是现已上市,在记录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"
它中已经陈述的意见,一个正确的答案下,但只是为了强调这个问题:从Linux命令行执行这个时候,你必须躲避&
字符数限制,因为符号告诉命令行来在后台运行一个命令:
git+https://git.repo/some_repo.git#egg=version_subpkg\&subdirectory=repo
注意符号前的反斜杠。 逃逸行为可能依赖于Linux发行版; 我不是专家。
如果忽略这一点,你可能会遇到像下面这样的含义模糊的错误:
bash: (...) command not found