Pip: 将--target与--editable一起使用会导致“内部”错误

创建于 2012-06-03  ·  22评论  ·  资料来源: pypa/pip

似乎同时使用--editable时不支持--target 。 使它正常工作会很好。 同时,应该有一些更好的诊断方法,例如

c:\>pip install -t z:\1 -e git+https://github.com/kennethreitz/requests.git#egg=requests
结果是

Obtaining requests from git+https://github.com/kennethreitz/requests.git#egg=requests
  Updating c:\python\virtualenv\test\src\requests clone
  Running setup.py egg_info for package requests

Downloading/unpacking certifi>=0.0.7 (from requests)
  Running setup.py egg_info for package certifi

Downloading/unpacking oauthlib>=0.1.0,<0.2.0 (from requests)
  Running setup.py egg_info for package oauthlib

Downloading/unpacking chardet>=1.0.0 (from requests)
  Running setup.py egg_info for package chardet

Downloading/unpacking rsa (from oauthlib>=0.1.0,<0.2.0->requests)
  Running setup.py egg_info for package rsa

    warning: no files found matching 'README'
Downloading/unpacking pyasn1>=0.0.13 (from rsa->oauthlib>=0.1.0,<0.2.0->requests)
  Running setup.py egg_info for package pyasn1

Installing collected packages: requests, certifi, oauthlib, chardet, rsa, pyasn1
  Running setup.py develop for requests
    usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
       or: -c --help [cmd1 cmd2 ...]
       or: -c --help-commands
       or: -c cmd --help

    error: option --home not recognized
    Complete output from command c:\python\virtualenv\test\Scripts\python.exe -c "import setuptools; __file__='c:\\python\\virtualenv\\test\\src\\requests\\setup.py'; exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" develop --no-deps --home=c:\users\piotr\appdata\local\temp\tmp3abskl:
    usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]

   or: -c --help [cmd1 cmd2 ...]

   or: -c --help-commands

   or: -c cmd --help



error: option --home not recognized

----------------------------------------
Command c:\python\virtualenv\test\Scripts\python.exe -c "import setuptools; __file__='c:\\python\\virtualenv\\test\\src\\requests\\setup.py'; exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" develop --no-deps --home=c:\users\piotr\appdata\local\temp\tmp3abskl failed with error code 1 in c:\python\virtualenv\test\src\requests
Storing complete log in C:\Users\Piotr\AppData\Roaming\pip\pip.log
editable target auto-locked bug

最有用的评论

我要补充一点,对于Google Appengine开发人员来说,这是一个问题,他们需要将其依赖项安装在应用程序根目录中的目录中,还需要在质量检查过程中在本地结帐中部署可编辑的依赖项。 就目前而言,可编辑文件需要手动符号链接,这很麻烦。

所有22条评论

同时遇到pip install -t dir -e git+git://github.com/shazow/urllib3.git@f088037#egg=urllib3错误。

我现在也遇到了这个错误。
如果将--target--editable组合在一起,这似乎会发生在任何包装上:
pip调用setup.py develop --home ... ,但是--home仅适用于setup.py install

因此,最后我发现使用--src选项和可编辑包而不是--target可以满足我的要求。

当指定了--editable --src时,也许--target应该与--src具有相同的效果,否则它可能会向用户显示错误消息并可能将用户指向--src

指定--editable时--target可能与--src具有相同的效果

IMO预期的行为将在target目录中创建/更新easy_install.pth。

我只是遇到了同样的问题。 正如@jezdez所建议的,您可以通过执行以下操作来解决此问题(不使用--editable):

git+ssh://[email protected]/some-user/some-repo.git#egg=Foo

我自己在这里也遇到了类似的问题:

Cleaning up...
Exception:
Traceback (most recent call last):
  File "/efs/dev/bti/pip/1.3.1-build001/install/exec/2.7/lib/python/pip-1.3.1-py2.7.egg/pip/basecommand.py", line 139, in main
  status = self.run(options, args)
  File "/efs/dev/bti/pip/1.3.1-build001/install/exec/2.7/lib/python/pip-1.3.1-py2.7.egg/pip/commands/install.py", line 291, in run
    for item in os.listdir(lib_dir):
OSError: [Errno 2] No such file or directory: '/tmp/tmppjdGHI/lib/python'

pip / commands / install.py中的第290行是:

     lib_dir = home_lib(temp_target_dir)

根据我的追踪,pip已在pip / req.py第1194行中清除了此路径,在其中删除了临时源。

     requirement.remove_temporary_source()

我可以看到清理工作仍然存在,但是将其包装成一个存在或尝试的块,以便安装可以继续进行。 有人认为这是一个问题吗?

@tima我在lib目录中有同样的问题。 据说HEAD可以解决此问题,但至少在CentOS上,问题仍然存在。 在此特定情况下,存在一个lib64目录而不是一个lib目录。

我在使用--target遇到了相同的问题(但没有--editable )。

这是我的回溯

Exception:
Traceback (most recent call last):
  File "/Users/beaum/homebrew/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/basecommand.py", line 139, in main
    status = self.run(options, args)
  File "/Users/beaum/homebrew/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg/pip/commands/install.py", line 294, in run
    for item in os.listdir(lib_dir):
OSError: [Errno 2] No such file or directory: '/var/folders/00/1hyxr000h01000cxqpysvccm0063vq/T/tmpc_E_Bl/lib/python'

+1,

正在下载PyYAML-3.10.tar.gz(241kB):已下载241kB
 为包pyyaml运行setup.py egg_info
 跳过“ ext / _yaml.c” Cython扩展名(最新)
安装收集的软件包:krcore,sympy,pyparsing,pyyaml
 为krcore运行setup.py开发
 用法:-c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
 或:-c --help [cmd1 cmd2 ...]
 或:-c --help-commands
 或:-c cmd --help
 错误:选项--home无法识别
 来自命令/ usr / bin / python -c“ import setuptools;的完整输出; __file __ ='/ tmp / krapp / src / krcore / setup.py'; exec(compile(open(__ file __)。read()。replace('\ r \ n','\ n'),__ file __,'exec'))“开发--no-deps --home = / tmp / tmpvKaRYp:
 用法:-c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
 或:-c --help [cmd1 cmd2 ...]
 或:-c --help-commands
 或:-c cmd --help
错误:选项--home无法识别
 ----------------------------------------
打扫干净...
命令/ usr / bin / python -c“ import setuptools; __file __ ='/ tmp / krapp / src / krcore / setup.py'; exec(compile(open(__ file __)。read()。replace('\ r \ n ','\ n'),__file__,'exec'))“开发--no-deps --home = / tmp / tmpvKaRYp在/ tmp / krapp / src / krcore中失败,错误代码为1

将-target与-r一起使用时(--requirements),出现“错误:选项--home无法识别”

:+1:

以下@YorickPeterse@jezdez解决方法导致:
错误:必须提供home或prefix / exec-prefix-不能同时提供

--editable和--target选项不能一起使用

我一直遇到同样的问题...
我试图使用pip在自定义位置(而不是virtualenv)安装python包,我需要其中一个(我正在研究的)可编辑。

这可能与https://github.com/pypa/setuptools/issues/392有关

而且由于一个pip命令可以同时触发setup.py develop (对于可编辑的pkg)和setup.py install (依赖项),所以我想到的唯一(非常难看)的解决方法是发出2个命令:

  • 一个用于--no-deps pkg
  • 一个仅用于依赖项(这里没有简单的方法...)

如果不需要更改--editable是否传递其他pip命令行选项,则将更加干净。
所以我想有两种方法可以使它起作用:

  • 使setuptools支持--home即。 修复https://github.com/pypa/setuptools/issues/392。 阅读该问题的详细信息可能会很棘手?
  • 具有pip abstract setuptools详细信息,并根据调用setup.py developsetup.py install不同地实现--target行为。 也许更简单?

具有pip abstract setuptools详细信息,并根据调用setup.py developsetup.py install不同地实现--target行为。 也许更简单?

使用此选项的最大困难在于,pip正在努力抽象出构建系统(setuptools)的详细信息,因此针对setuptools问题的特殊解决方法无法达到该目标。

最后,我设法使用--prefix来做我想做的事,而没有使用任何自定义--install-option ,所以无论是否传递--editable ,我最终都可以使用相同的选项。

但是我不得不以某种方式调整现有的(debian)布局以匹配pip的默认值(site-packages),因为没有pip选项来指定布局...

也许是考虑添加的功能?

@xavfernandez

这需要--target option标签。

有人可以分享一下同时使用-e和-t选项的最佳解决方法吗? 您是否建议使用distutils,因为它支持'--home'选项?

任何新闻?

我仍在将--editable--prefix (而不是--target )一起使用,这对我来说很有用。 但是由于--prefix--target之间的差异,我被困在pip <9.0.0上。 更多细节在https://github.com/pypa/pip/issues/4243

如果要使用--prefix选项而不是--target,则需要正确设置PYTHONPATH (指向要创建的站点软件包目录),然后才能调用pip -t . --prefix myprefix 。 有没有一种优雅的方法来规避这一点?

即将结束,将一堆相关问题移至一个问题:#4390。

我要补充一点,对于Google Appengine开发人员来说,这是一个问题,他们需要将其依赖项安装在应用程序根目录中的目录中,还需要在质量检查过程中在本地结帐中部署可编辑的依赖项。 就目前而言,可编辑文件需要手动符号链接,这很麻烦。

该线程已被自动锁定,因为它关闭后没有任何近期活动。 请为相关错误打开新一期。

此页面是否有帮助?
0 / 5 - 0 等级