Python3 模块导入混淆

天鹅

当我mediafile使用 pip安装 python 模块(例如)时,我可以像这样导入它:

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环境变量中。有关如何在 Windows 中执行此操作的信息,请参见例如此问题

或者,您可以将其添加到脚本本身中:

import sys
sys.path.append("tools")
from mediafile import MediaFile

但是,设置 PYTHONPATH 是执行此操作的首选方法。

请注意,我假设您已mediafile按上述方式删除并重新安装,因此您的目录结构应为:

tools
├── mediafile.py
├── mutagen
├── ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章