Python3 模块导入混乱
Python3 module import confusion
当我使用 pip 安装 python 模块(例如 mediafile
)时,我可以像这样导入它:
from mediafile import MediaFile
而且效果很好。
但是后来我把它安装到不同的位置(pip install --target="C:/msys64/home/myname/myprogram/tools/mediafile/" mediafile
),我只能这样导入它:
from tools import mediafile
并且导入 MediaFile
只是行不通。 (我尝试了 from tools.mediafile import MediaFile
和其他几个变体但没有成功)。
这是一个输出:
ImportError: cannot import name 'MediaFile' from 'tools.mediafile' (unknown location)
当我尝试使用 mediafile.MediaFile
时,它给我这个错误:
AttributeError: module 'tools.mediafile' has no attribute 'MediaFile'
知道我哪里语法错了吗?
命令 pip install --target=/path/to/package mypackage
将在您指定的目录 中安装软件包 ,即 /path/to/package/mypackage
。在您的情况下,它可能位于 C:/msys64/home/myname/myprogram/tools/mediafile/mediafile
.
如果是这种情况,您应该可以通过以下方式导入它:
from tools.mediafile.mediafile import MediaFile
但不要这样做 - 相反,您应该删除它并使用
重新安装
pip install --target="C:/msys64/home/myname/myprogram/tools/" mediafile
那么你应该可以用
导入它
from tools.mediafile import Mediafile
正如您所发现的,上述方法的问题在于,包期望能够仅使用 import dependency
导入它们自己的依赖项——它们不知道您的 tools
目录.要解决此问题并使您自己的导入更容易,您需要将目录添加到您的 PYTHONPATH
environment variable. See e.g. this question 以了解如何在 Windows.
中执行此操作
或者,您可以将其添加到脚本中:
import sys
sys.path.append("tools")
from mediafile import MediaFile
然而,设置 PYTHONPATH 是执行此操作的首选方法。
请注意,我假设您如上所述删除并重新安装了 mediafile
,因此您的目录结构应为:
tools
├── mediafile.py
├── mutagen
├── ...
当我使用 pip 安装 python 模块(例如 mediafile
)时,我可以像这样导入它:
from mediafile import MediaFile
而且效果很好。
但是后来我把它安装到不同的位置(pip install --target="C:/msys64/home/myname/myprogram/tools/mediafile/" mediafile
),我只能这样导入它:
from tools import mediafile
并且导入 MediaFile
只是行不通。 (我尝试了 from tools.mediafile import MediaFile
和其他几个变体但没有成功)。
这是一个输出:
ImportError: cannot import name 'MediaFile' from 'tools.mediafile' (unknown location)
当我尝试使用 mediafile.MediaFile
时,它给我这个错误:
AttributeError: module 'tools.mediafile' has no attribute 'MediaFile'
知道我哪里语法错了吗?
命令 pip install --target=/path/to/package mypackage
将在您指定的目录 中安装软件包 ,即 /path/to/package/mypackage
。在您的情况下,它可能位于 C:/msys64/home/myname/myprogram/tools/mediafile/mediafile
.
如果是这种情况,您应该可以通过以下方式导入它:
from tools.mediafile.mediafile import MediaFile
但不要这样做 - 相反,您应该删除它并使用
重新安装pip install --target="C:/msys64/home/myname/myprogram/tools/" mediafile
那么你应该可以用
导入它from tools.mediafile import Mediafile
正如您所发现的,上述方法的问题在于,包期望能够仅使用 import dependency
导入它们自己的依赖项——它们不知道您的 tools
目录.要解决此问题并使您自己的导入更容易,您需要将目录添加到您的 PYTHONPATH
environment variable. See e.g. this question 以了解如何在 Windows.
或者,您可以将其添加到脚本中:
import sys
sys.path.append("tools")
from mediafile import MediaFile
然而,设置 PYTHONPATH 是执行此操作的首选方法。
请注意,我假设您如上所述删除并重新安装了 mediafile
,因此您的目录结构应为:
tools
├── mediafile.py
├── mutagen
├── ...