DistutilsOptionError:必须提供home或prefix/exec-prefix - 而不是两者

Ark*_*ind 137 python google-app-engine install distutils pip

我通常通过pip安装了python包.

对于Google App Engine,我需要将软件包安装到另一个目标目录.

我试过了:

pip install -I flask-restful --target ./lib

但它失败了:

必须提供home或prefix/exec-prefix - 而不是两者

我怎样才能让它发挥作用?

ayv*_*azj 280

你在使用OS X和Homebrew吗?Homebrew python页面https://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.md用pip和解决方法调出一个已知问题.

为我工作.

您可以通过添加带有以下内容的〜/ .pydistutils.cfg文件使此"空前缀"成为默认值:

[install]
prefix=
Run Code Online (Sandbox Code Playgroud)

编辑:不要使用这个自制的推荐选项,它会破坏正常的点子操作.

  • 这个空前缀业务打破正常的`pip install`操作:( (16认同)
  • 有没有人想出如何允许`--target`而*不*破坏默认的`pip install`行为? (10认同)
  • 请注意,该文件为我打破了虚拟环境. (6认同)
  • 好东西,链接不好,这是我期待的新的:https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Homebrew-and-Python.md (5认同)
  • 这似乎不再有效.链接已断开,更新后的链接不会讨论pydistutils.cfg (3认同)

And*_*reG 150

我相信这个问题有一个更简单的解决方案(Homebrew的macOS上的Python),它不会破坏你正常的pip操作.

您所要做的就是setup.cfg在项目的根目录下创建一个文件,通常是您的主__init__.py文件或可执行文件的位置.因此,如果项目的根文件夹是:/path/to/my/project/,setup.cfg在那里创建一个文件并将魔术字放入:

[install]
prefix=  
Run Code Online (Sandbox Code Playgroud)

好的,现在您可以运行该文件夹的pip命令:

pip install package -t /path/to/my/project/  
Run Code Online (Sandbox Code Playgroud)

此命令将仅针对该文件夹正常运行.只需复制setup.cfg到您可能拥有的任何其他项目.无需.pydistutils.cfg在您的主目录上写一个.完成模块安装后,您可以删除setup.cfg.

  • _emphasis_在安装部分后删除`setup.cfg`.我整天烧了2天试图弄清楚为什么我的virtualenv环境搞砸了,错误就像`由于环境错误导致无法安装包:[Errno 1]操作不允许:'/ bin/easy_install'`.删除安装文件恢复了我的理智 (10认同)
  • 这应该是公认的答案.避免导致全局点子设置出现问题. (9认同)
  • 这也与pip3.6完美配合。而且我的点子仍然完好无损。 (2认同)

Jer*_*ony 22

在OSX(mac)上,假设一个名为/ var/myproject的项目文件夹

  1. cd /var/myproject
  2. 创建一个名为setup.cfgand add 的文件 [install] prefix=
  3. pip install <packagename> -t .


OJF*_*ord 12

Homebrew用户的另一个解决方案*就是使用a virtualenv.

当然,这可能会消除对目标目录的需求 - 但即使它没有,我--target在虚拟环境中发现默认情况下(如在没有创建/修改配置文件的情况下).


*我说解决方案; 也许这只是精心使用venvs的另一个动机......

  • 简直不敢相信这只是一个月前.刚抓住自己回答我自己的问题; 提前时间... (3认同)