当git未安装时,pip尝试使用git。

3

我有一个项目文件夹,它是一个Git仓库(包含.git文件夹)。当我使用命令pip freeze时,pip尝试使用git。然而,由于我的系统没有安装git,所以会导致错误:

(env) PS C:\Users\eclaird\work\myproject> pip freeze
Cannot find command 'git'
Storing complete log in C:\Users\eclaird\pip\pip.log
(env) PS C:\Users\eclaird\work\myproject>

pip.log:

------------------------------------------------------------
C:\Users\eclaird\work\env\Scripts\pip-script.py run on 01/09/14 11:54:42
Cannot find command 'git'
Exception information:
Traceback (most recent call last):
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\basecommand.py", line 134, in main
    status = self.run(options, args)
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\commands\freeze.py", line 73, in run
    req = pip.FrozenRequirement.from_dist(dist, dependency_links, find_tags=find_tags)
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\__init__.py", line 180, in from_dist
    req = get_src_requirement(dist, location, find_tags)
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\vcs\__init__.py", line 249, in get_src_requirement
    return version_control().get_src_requirement(dist, location, find_tags)
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\vcs\git.py", line 151, in get_src_requirement
    repo = self.get_url(location)
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\vcs\git.py", line 122, in get_url
    [self.cmd, 'config', 'remote.origin.url'],
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\vcs\__init__.py", line 110, in cmd
    command = find_command(self.name)
  File "C:\Users\eclaird\work\env\lib\site-packages\pip\util.py", line 108, in find_command
    raise BadCommand('Cannot find command %r' % cmd)
BadCommand: Cannot find command 'git'

有没有办法在pip中禁用git集成?
(pip 1.4.1,Python 2.7.6)

1
当使用git存储库时,pip仅需要git。如果让pip实现自己的git阅读器,这可能有点浪费,因为git二进制文件已经完美地实现了这一点。在Windows下安装git工具很容易,只需使用github安装程序即可,也许这对您来说是一个有效的解决方法? - Wolph
1个回答

8
很遗憾,没有配置选项可以启用/禁用后端。
通过挖掘代码发现以下细节: Git模块始终被注册: 在pip/install.py中导入了git模块。在其末尾,它会注册自己,并因此在任何声明为´git.Git´的方案与依赖项的URL匹配时进行查询。
schemes = ('git', 'git+http', 'git+https', 'git+ssh', 'git+git', 'git+file')
异常未被处理有趣的是,冻结预计在确定要冻结的依赖项URL时可能会出现错误。摘自pip.FrozenRequirement
try:
    req = get_src_requirement(dist, location, find_tags)
except InstallationError:
    logger.warn("Error when trying to get requirement for VCS system %s, falling back to uneditable format" % ex)

InstallationError继承自PipError。不幸的是,会引发´BadCommand´类型的异常,它继承自´PipError´。

所以,除了篡改源代码之外:你无能为力。如果你需要让它工作,你需要安装git、篡改源代码或模拟一个git可执行文件。如果你选择后者,首先需要伪造´git config remote.origin.url´,这个函数在pip.vcs.git.Git.get_url中被调用(并失败)。

希望这可以帮到你,尽管它不是一个肯定的答复。 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接