Python ImportError: 无法导入名称__version__。

12

我正在尝试使用requests和requests_oauthlib,现在只是尝试使用文档中用于requests_oauthlib的死简单 Twitter验证凭据示例来确认我已经了解基本工作原理。我执行了“pip install requests requests_oauthlib”命令获取模块。在终端窗口中,我可以轻松地“导入请求”模块,但当我尝试“导入requests_oauthlib”时,出现以下错误:

>>> import requests_oauthlib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/requests_oauthlib/__init__.py", line 1, in
  <module>
    from .oauth1_auth import OAuth1
  File "/usr/lib/python2.7/site-packages/requests_oauthlib/oauth1_auth.py", line 10, in  
  <module>
    from requests.utils import to_native_string
  File "/usr/lib/python2.7/site-packages/requests/utils.py", line 23, in <module>
    from . import __version__
ImportError: cannot import name __version__

utils.py的第23行确实是这样的:

from . import __version__

我正在使用 Fedora 上的 Python 2.7.5,经过多次尝试仍无法解决问题,希望能得到帮助,非常感激...


你是否拥有这两个模块的最新版本?(尝试使用 pip install -U 更新)我无法在全新安装中重现此问题。 - Wooble
谢谢Wooble,在尝试之前,我重启了我的机器,以防万一出了什么问题,现在我可以很好地导入requests_oauthlib。唉...早些时候应该尝试的。不过还是感谢你的建议。 - hyssop
3个回答

7
请检查根目录下的__init__.py文件。openpyxl从.constrants.json文件中读取这些信息。但是,PyInstaller在某些情况下无法正常工作。您需要自己编写一个__version__.py文件,并在__init__.py中进行替换。
另一个更简单的方法是按照以下方式更改__init__.py文件:
import json
import os


# Modified to make it work in PyInstaller
#try:
#    here = os.path.abspath(os.path.dirname(__file__))
#    src_file = os.path.join(here, ".constants.json")
#    with open(src_file) as src:
#        constants = json.load(src)
#        __author__ = constants['__author__']
#        __author_email__ = constants["__author_email__"]
#        __license__ = constants["__license__"]
#        __maintainer_email__ = constants["__maintainer_email__"]
#        __url__ = constants["__url__"]
#        __version__ = constants["__version__"]
#except IOError:
#    # packaged
#    pass

__author__ = 'See AUTHORS'
__author_email__ = 'eric.gazoni@gmail.com'
__license__ = 'MIT/Expat'
__maintainer_email__ = 'openpyxl-users@googlegroups.com'
__url__ = 'http://openpyxl.readthedocs.org'
__version__ = '2.4.0-a1'

"""Imports for the openpyxl package."""
from openpyxl.compat.numbers import NUMPY, PANDAS
from openpyxl.xml import LXML

from openpyxl.workbook import Workbook
from openpyxl.reader.excel import load_workbook

print('You are using embedded openpyxl... 2.4.0-a1 ...')

1
对于那些感兴趣的人:这个问题已经在pyinstaller 3.3的dev分支中得到了解决。请参见openpyxl的问题和github上的pull request - maggie

4
我在项目中使用了openpyxl,在将其通过py2exe编译成exe文件时,编译成功但运行时遇到了相同的问题。 ImportError: cannot import name __version__ 尝试修改openpyxl包文件夹根目录下的init.py文件,不要从constants.json文件中读取版本号,直接像这样写:__version__ = '2.4.1'。我是通过这种方式解决的。

0

我在使用覆盖率模块时遇到了类似的错误,但上述方法都没有帮助。

最终,我删除了我的 Python 虚拟环境(.venv),并从 requirements.txt 重新创建了它,问题得以解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接