【问题标题】:Making python aware of packages lacking __init__.py让 python 知道缺少 __init__.py 的包
【发布时间】:2020-04-15 19:59:58
【问题描述】:

我无法在 OS X 上导入 mpl_toolkits,显然是因为包目录 (/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/mpl_toolkits) 中缺少 __init__.py 文件。

$ python -c 'import mpl_toolkits'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named mpl_toolkits

$ ls /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/mpl_toolkits
axes_grid  axes_grid1  axisartist  exceltools.py  exceltools.pyc  gtktools.py  gtktools.pyc  mplot3d

子包mplot3d 确实有一个__init.py__ 但也不能导入:

$ ls /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/mpl_toolkits/mplot3d/
__init__.py  __init__.pyc  art3d.py  art3d.pyc  axes3d.py  axes3d.pyc  axis3d.py  axis3d.pyc  proj3d.py  proj3d.pyc

$ python -c 'from mpl_toolkits.mplot3d import axes3d'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named mpl_toolkits.mplot3d

从 OS X 10.11 开始,即使是 root 在/System 中也没有写权限。我知道可以通过执行csrutil disable 启动进入恢复模式并禁用系统完整性保护,这将允许创建丢失的__init.py__ 文件。但是,有没有更简单的方法让 python 知道这个包?

【问题讨论】:

  • 你没有使用虚拟环境吗?

标签: python macos python-2.7


【解决方案1】:

问题是您仍在使用 Python 2。Matplotlib 不久前放弃了对 Python 2 的支持。 Python 开发团队本身将在一周内(2020 年初)放弃所有 Python 2 支持。您至少需要 Python 3.6 才能使用最新的 Matplotlib。

【讨论】:

  • 感谢您告诉我。我安装了python3。你知道 module-not-found 错误的原因是否仅仅是缺少__init.py__
  • @user001:应该是这样的。 mpl_toolkits 是一个命名空间包,不需要__init__.py。不过,这在 Python 2 上不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 2020-05-07
  • 2021-12-28
  • 2020-08-16
  • 2013-04-21
相关资源
最近更新 更多