Python ImportError:确认安装后,没有名为“ requests”的模块

时间:2019-03-28 18:50:00

标签: python importerror

我是python的新手,并在终端中进行了一些设置,现在正尝试在Atom中运行python代码。

我在代码编辑器中的前三行是:

import re
import requests
import robobrowser

运行代码时,我不断得到

  

ImportError:没有名为robobrowser的模块

我认为这与文件的路径或位置有关,但是我不确定如何检查。

我正在终端中运行的版本:

(prot) MacBook:prot myname$ python --version
Python 3.7.3
(prot) MacBook:prot myname$ pip --version
pip 19.0.3 from /Users/myname/prot/prot/lib/python3.7/site- 
packages/pip (python 3.7)

我还使用以下方法创建了一个虚拟环境:

MacBook:prot myname$ python3 -m venv prot
MacBook:prot myname$ source prot/bin/activate

所以我的默认命令行显示为:

  

(保护)MacBook:prot myname $

运行以下命令表明所需的软件包已存在。

(prot) MacBook:prot myname$ pip3 list
Package        Version 
-------------- --------
beautifulsoup4 4.7.1   
certifi        2019.3.9
chardet        3.0.4   
idna           2.8     
pip            19.0.3  
requests       2.21.0  
robobrowser    0.5.3   
setuptools     40.8.0  
six            1.12.0  
soupsieve      1.9     
urllib3        1.24.1  
Werkzeug       0.15.1

编辑(根据评论进行更新):

import sys
print(sys.version)

在Atom输出中(用于说2.#,所以我在atom中更新了版本):

  

3.7.3(默认值,2019年3月27日,09:23:15)

     

[与GCC 4.2.1兼容的Apple LLVM 10.0.0(clang-1000.0.42)]

Robobrowser正确显示在终端中:

(prot) MacBook:prot myname$ pip3 show robobrowser
Name: robobrowser
Version: 0.5.3
Summary: Your friendly neighborhood web scraper
Home-page: https://github.com/jmcarp/robobrowser
Author: Joshua Carp
Author-email: jm.carp@gmail.com
License: MIT
Location: /Users/myname/prot/prot/lib/python3.7/site-packages
Requires: beautifulsoup4, requests, six, Werkzeug
Required-by: 

要检查剩余的robobrowser问题,我在原子中运行了此

from pip import _internal
_internal.main(['list'])

并得到了此消息(注意缺少robobrowser):

Package         Version 
--------------- --------
cached-property 1.5.1   
certifi         2019.3.9
chardet         3.0.4   
idna            2.8     
pip             19.0.3   
python-dateutil 2.8.0   
requests        2.21.0  
setuptools      40.8.0  
six             1.12.0  
urllib3         1.24.1  
wheel           0.33.1  

在终端中,运行

pip show requests
pip show robobrowser

返回相同的位置

  

/Users/myname/prot/prot/lib/python3.7/site-packages

在原子中运行

import sys
print(sys.path)

输出

  

['','/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python37.zip','/usr/local/Cellar/python/3.7。 3 / Frameworks / Python.framework / Versions / 3.7 / lib / python3.7','/ usr / local / Cellar / python / 3.7.3 / Frameworks / Python.framework / Versions / 3.7 / lib / python3.7 / lib -dynload','/ usr / local / lib / python3.7 / site-packages']

所以我想我需要将以上位置添加到sys.path

2 个答案:

答案 0 :(得分:0)

  

问题:ImportError:没有名为“ robobrowser”的模块

运行以下命令,验证是否可以安装找到module,并且Locationsys.path中。

import sys
import pkg_resources as pkg

sys_path = sys.path
ws_entries = pkg.WorkingSet().entries

print('Python    :{}'.format(sys.version.split('\n')[0]))

key = 'robobrowser'    

key_found = False
for dist in pkg.working_set:        
    if key in dist.key:
        key_found = True
        print('Package   :{}'.format(dist.project_name))
        print('Version   :{}'.format(dist.version))
        print('Location  :{}'.format(dist.location))

        importable = False
        for info in pkg.find_distributions(dist.location, only=True):
            if key in info.key:
                importable = True
                break

        if importable:
            print('Importable: Location were on sys.path')
        else:
            print('Not importable: Unless {} were added to sys.path.'.format(dist.location))

        print('sys.path  :{}'.format(dist.location in sys_path))
        print('WorkingSet.entries:{}'.format(dist.location in ws_entries))
else:
    if not key_found:
        print("No package like '{}' found.".format(key))
  

输出:示例key = 'requests'

Python    : 3.5.3 (default, Jan 19 2017, 14:11:04) 
Package   : requests
Version   : 2.19.1
Location  : /usr/local/lib/python3.5/dist-packages
Importable: Location were on sys.path
sys.path  : True
WorkingSet.entries: True

答案 1 :(得分:0)

我解决了问题,但不确定是否以正确的方式这样做。我退出venv,然后回到我的主目录。安装的robobrowser然后回到我正在处理的特定venv /目录中。这解决了我的问题。