python 如何修复ImportError:没有名为packages.urllib3的模块?

ao218c7q  于 2023-05-27  发布在  Python
关注(0)|答案(7)|浏览(270)

我在Ubuntu机器上运行Python 2.7.6。当我在终端运行twill-sh(Twill是一种用于测试网站的浏览器)时,我得到以下结果:

Traceback (most recent call last):
  File "dep.py", line 2, in <module>
    import twill.commands
  File "/usr/local/lib/python2.7/dist-packages/twill/__init__.py", line 52, in <module>
    from shell import TwillCommandLoop
  File "/usr/local/lib/python2.7/dist-packages/twill/shell.py", line 9, in <module>
    from twill import commands, parse, __version__
  File "/usr/local/lib/python2.7/dist-packages/twill/commands.py", line 75, in <module>
    browser = TwillBrowser()
  File "/usr/local/lib/python2.7/dist-packages/twill/browser.py", line 31, in __init__
    from requests.packages.urllib3 import connectionpool as cpl
ImportError: No module named packages.urllib3

但是,我可以在Python控制台中导入urllib。会是什么原因呢?

oalqel3c

oalqel3c1#

如果您已经从默认版本安装了'requests',则可能必须
sudo pip install --upgrade requests
感谢@bkzland对之前答案的评论:
我按照这些步骤有同样的错误,我需要使用sudo pip安装--升级每次使它工作。- bkzland Dec 17 '15在12:57
---现在,我如何在我的www.example.com中将此设置为依赖项setup.py?

eit6fx6z

eit6fx6z2#

标准urlliburllib2与第三方urllib3之间存在差异。
看起来twill没有安装依赖项,所以你必须自己安装。Twill依赖于requests库,该库附带并在幕后使用urllib3。您还需要lxmlcssselect库。
您可以在终端上安装它们,如下所示:
pip install requests
pip install lxml

pip install cssselect

fafcakar

fafcakar3#

python3

#note that requests.packages.urllib3 is just an alias for urllib3
from urllib3 import disable_warnings
from urllib3.exceptions import InsecureRequestWarning
disable_warnings(InsecureRequestWarning)
7z5jn7bk

7z5jn7bk4#

如果你有一个基于RHEL的味道,那么:
yum install -y python-requests
基于Debian/Ubuntu的风格:
apt-get install -y python-requests
基于Arch Linux的风格:
pacman -S python-requests

kkbh8khc

kkbh8khc5#

问题解决人:

pip install --upgrade urllib3==1.19.1
pip install --upgrade requests
au9on6nz

au9on6nz6#

应该指出的是,如果你犯了我犯过的新手错误,用“旧”的python命令运行python 3脚本,也会出现这个错误。运行脚本

python3 <script>.py

python <script>.py
r7xajy2e

r7xajy2e7#

这里的问题是通过子依赖隐式地依赖于某个东西。这种风格相当于引用一个类的dunder-methods,因为依赖项自己的依赖项可能会改变(例如,如果requests停止使用/暴露urllib3)。
您可以通过显式地使用依赖项来避免此问题,并将它们(即urllib3)表示为requirements.txt/pyproject.toml文件中的依赖项。

相关问题