Python 导入的第三方模块没有_文件_属性 背景
我已经对Python 导入的第三方模块没有_文件_属性 背景,python,python-2.7,Python,Python 2.7,我已经对\uuuu file\uuuu属性如何从、和各种网站工作进行了一些研究 据我所知,只要是从文件加载的,所有python模块都应该有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu属性 问题 我正在使用安装第三方python模块opencafe (env)$ pip install opencafe 我正在利用这个测试框架 当我从CLI运行test命令时,会出现此问题。运行该命令时,它会触发以下文件:env/lib/python2.7/site packa
\uuuu file\uuuu
属性如何从、和各种网站工作进行了一些研究
据我所知,只要是从文件加载的,所有python模块都应该有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
属性
问题
我正在使用安装第三方python模块opencafe
(env)$ pip install opencafe
我正在利用这个测试框架
当我从CLI运行test命令时,会出现此问题。运行该命令时,它会触发以下文件:env/lib/python2.7/site packages/cafe/configurator/managers.py
在该文件中有
import cafe
后来
_PLUGIN_DIR = os.path.join(os.path.dirname(cafe.__file__), 'plugins')
运行此文件时,会发生以下错误:
AttributeError: 'module' object has no attribute '__file__'
在这种情况下也会发生相同的错误:
(env) $ pip install opencafe
Collecting opencafe
Using cached opencafe-0.3.1-py2.py3-none-any.whl
Installing collected packages: opencafe
Successfully installed opencafe-0.3.1
(env) $ python
Python 2.7.10 (default, Jul 30 2016, 18:31:42)
>>> import cafe
>>> cafe.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'
(env)$pip安装opencafe
收集opencafe
使用缓存的opencafe-0.3.1-py2.py3-none-any.whl
安装收集的软件包:opencafe
已成功安装opencafe-0.3.1
(环境)$python
Python 2.7.10(默认值,2016年7月30日,18:31:42)
>>>进口咖啡馆
>>>咖啡馆__
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“模块”对象没有属性“\u_文件”
我的想法
我自然倾向于认为这是opencafe本身的问题,因为我只是在安装框架并从CLI运行测试命令
然而,我想知道在虚拟环境中的安装是否有问题,或者PYTHONPATH是否有问题
文档中明确指出,“静态链接到解释器的C模块不存在\uuuuu file\uuuu
属性”。此模块是本地安装的python模块。它不像sys
模块那样链接到解释器
[编辑]
下面是关于名称空间包的一些更好的信息
判断包是否用作命名空间包的主要方法是检查其\uuuuu file\uuuuu
属性。如果它完全丢失,那么包就是一个名称空间
最后更新
事实证明,opencafe
不能与最新版本的virtualenv
一起使用。它仅适用于15.0.1版
或更早版本。还原回来为我清除了此错误消息
当它与此版本一起安装时,在virtualenv中的包中创建了一个
\uuuuu init\uuuu.pyc
文件。这个字节编译是\uuu文件\uuuu
获取信息的方式。它是一个名称空间包,一种可以跨多个目录拆分的奇怪包。由于这种分割机制,它不应该有一个\uuuuuuuuu文件。这是因为opencafe
不是一个普通的python模块。当您打开他们的主模块时,您可以很容易地看到这一点
declare\u名称空间
显式创建一个名称空间
包。有关更多信息,请访问 多谢各位。我不熟悉名称空间包。在这种情况下,你会说问题确实出在opencafe本身,因为它在自己的一个模块中调用cafe.\u uu file\u u
?除了在每次安装中处理该行之外,还有什么其他的解决方法吗?请注意,PEP 382被拒绝。@user2357112这是正确的,但我考虑的是“今天的命名空间包”部分。在这种情况下,您会说问题确实出在opencafe本身,因为它在自己的一个模块中调用cafe.\uu file.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?除了在每次安装时都要处理这一行之外,还有其他的工作吗?@gliemezis:有吗?奇怪的我不认为它应该这么做。我同意这很奇怪。这不是最近的更改,但现在给我造成了这个错误。事实证明,OpenCafe尚未更新,无法与较新版本的python以及更具体地说,virtualenv
的最新版本一起使用。使用早期版本的virtualenv
安装opencafe
,特别是15.0.1
,可以使安装摆脱此错误。