Python-future: 内置导入在 0.17.0 版中损坏

创建于 2018-10-26  ·  14评论  ·  资料来源: PythonCharmers/python-future

在 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
>>>

所有14条评论

我们这里也有同样的问题。

试图指出问题的根源,但尚不清楚。

我们有同样的问题,但有趣的是,如果我们在没有缓存目录的情况下进行 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\AppData\Local\pip 然后重新安装包修复它。

所以看起来(这是一个理论)像 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 修复了它。

很高兴听见!

感谢吉尔斯、文森特等人。 您的指导非常有帮助:)

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