Python ImportError:无法导入名称__version__

Posted

技术标签:

【中文标题】Python ImportError:无法导入名称__version__【英文标题】:Python ImportError: cannot import name __version__ 【发布时间】:2014-09-27 02:02:03 【问题描述】:

我正在尝试使用 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,在我尝试重新启动计算机之前,以防万一出现问题,并且我无法正常导入 requests_oauthlib。叹息...应该早点尝试。不过谢谢你的想法。 【参考方案1】:

检查根目录下的__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 ...')

【讨论】:

对于那些有兴趣的人:这是在 pyinstaller 中为 pyinstaller 3.3 的 dev 分支修复的。请参阅 github 上的 issue on openpyxl 和 pull request。【参考方案2】:

我在我的项目中使用了openpyxl,当我用py2exe制作exe时,编译是可以的,但是当我运行编译好的exe时,我遇到了同样的问题。

ImportError: 无法导入名称 __version__

尝试修改openpyxlpaceage文件夹根目录下的init.py,不要从constants.json文件中读取version,写成__version__ = '2.4.1'。 我就是这样解决的。

【讨论】:

以上是关于Python ImportError:无法导入名称__version__的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:无法从部分初始化的模块“dash”导入名称“dcc”-python

Python3.6 ImportError:无法导入名称'main'Linux RHEL6

ImportError:无法导入名称“PandasError”

App Engine Python 2.7 - ImportError:无法导入名称 apiproxy

在 Python 2.7 中出现“ImportError:无法导入名称 HTTPSConnection”错误

Python urllib3 错误 - ImportError:无法导入名称 UnrewindableBodyError