在 0.17.0 版中导入内置函数会导致错误。
>>> import builtins
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named builtins
>>>
我们这里也有同样的问题。
试图指出问题的根源,但尚不清楚。
我们有同样的问题,但有趣的是,如果我们在没有缓存目录的情况下进行 pip install,它会起作用......
pip install -U --force future
>>> import builtins
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named builtins
>>>
pip install -U --force --no-cache-dir future
>>> import builtins
>>>
在 Windows 上,从 C:\Users\ 中删除缓存的 future 0.17.0 whl
所以看起来(这是一个理论)像 0.17.0 的早期发布被破坏了,但现在已经修复。
@jmadler让我们知道发生了什么,我们想了解上下文。
请告诉我,你没有用 Python-3 构建future
轮子并尝试在 Python-2 中使用它吗? 如果是这样,这可能是问题的原因。
好吧,如果未来的轮子是由 python 3 构建的,缓存为通用的,然后由 python 2 从缓存中检索,那就是它了。
对不起各位! 这是我第一次分发这个特定的包(还有 PyPI ......)
当我进行构建时,我使用 Py3 运行了python setup.py sdist
,并在 Py2 和 Py3 上测试了pip install dist/future-0.17.0.tgz
并验证了它是通过该机制安装的。 我通过在 REPL 上针对内置、reprlib 和未来测试一些导入和 dir() 来进行安装验证
验证后,我运行twine upload dist/future-0.17.0.tgz
将其升级到 PyPI。
pip2 --version && pip3 --version
:
来自 /usr/local/lib/python2.7/site-packages/pip (python 2.7) 的 pip 10.0.1
来自 /usr/local/lib/python3.7/site-packages/pip (python 3.7) 的 pip 18.0
另一种可能性是本地 bdist_wheel 建立在 Py3 上并缓存在某处并被视为通用(如果不是),但我没有将轮子上传到 PyPI。
我无法在我的 macOS 机器上用pip install future==0.17.0
为 Py2 和 Py3 在空的 venv 中重现。
PyPI 是否有可能以某种方式重写包? 或者也许 pip 的行为发生了变化?
在 Windows 上,从 C:\Users 中删除缓存的 future 0.17.0 whl
\AppData\Local\pip 然后重新安装包修复它。 所以看起来(这是一个理论)像 0.17.0 的早期发布被破坏了,但现在已经修复。
我也这么想。 也许有人可以通过修复发布 0.17.1)
确实,如果包是通过py3安装的,它会缓存在本地pip缓存中。 future
(beit py2 或 py3)的任何未来安装都将使用此缓存版本作为其标记的通用版本。
但是,setup.py https://github.com/PythonCharmers/python-future/blob/master/setup.py#L61具有使生成的轮子(现在在 pip 缓存中)与 py2 不兼容的条件(因为它是为 py3 构建的)。 我想如果轮子是通过 py2 生成的,这对于 py3 安装来说可能意味着坏消息。
@jmadler该问题已在 master 中解决,唯一剩下的就是合并 PR #404 并发布 v0.17.1
现在,在 v0.17.0 中,任何在他们的机器上同时使用 Py2 和 Py3 的用户都有可能获得错误的 pip 轮缓存并遇到此错误。
是否有可能尽快发布? 如果您有任何问题/疑虑,请尽管提出,我很乐意为您提供帮助😃
听起来不错,我发布了 0.17.1,其中包含 #399 和 #404。 你能看看,让我知道它是否为你解决了这个问题?
A1 - 固定。
脚步:
1) 运行安装了 Python 3.6 和 Python 2.7 的原始 Windows 10 机器
2) pip install future 在 Python 3.6 上下文中——确认轮子已构建和缓存
py -3.6 -m pip 安装未来
缓存轮:future-0.17.1-cp36-none-any.whl
3) pip install future 在 Python 2.7 上下文中 -- 确认轮子再次构建并且不使用步骤 2 中的缓存版本)
py -2.7 -m pip 安装未来
缓存轮:future-0.17.1-cp27-none-any.whl
4) 在 Python 2 会话中,导入内置函数并且没有发生错误
py -2.7
Win32 上的 Python 2.7.8(默认,2014 年 6 月 30 日,16:03:49)[MSC v.1500 32 位(英特尔)]
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
导入内置函数
相比之下,0.17.0 确实有这个单轮:future-0.17.0-py2.py3-none-any.whl
我在 0.17.0 上遇到了这个问题,可以确认 0.17.1 修复了它。
很高兴听见!
感谢吉尔斯、文森特等人。 您的指导非常有帮助:)
最有用的评论
我们有同样的问题,但有趣的是,如果我们在没有缓存目录的情况下进行 pip install,它会起作用......