[英]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
来导入它们自己的import dependency
——它们不会知道您的tools
目录。 为了解决这个问题,并使您自己的导入更容易,您需要将该目录添加到您的PYTHONPATH
环境变量中。 有关如何在 Windows 中执行此操作的信息,请参见例如此问题。
或者,您可以将其添加到脚本本身中:
import sys
sys.path.append("tools")
from mediafile import MediaFile
但是,设置 PYTHONPATH 是执行此操作的首选方法。
请注意,我假设您如上所述删除并重新安装了mediafile
,因此您的目录结构应该是:
tools
├── mediafile.py
├── mutagen
├── ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.