繁体   English   中英

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来导入它们自己的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM