首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3模块导入混乱

Python3模块导入混乱
EN

Stack Overflow用户
提问于 2021-07-12 10:45:44
回答 1查看 91关注 0票数 0

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

代码语言:javascript
复制
from mediafile import MediaFile

而且效果很好。

但是当我将它安装到一个不同的位置(pip install --target="C:/msys64/home/myname/myprogram/tools/mediafile/" mediafile)时,我只能像这样导入它:

代码语言:javascript
复制
from tools import mediafile

而导入MediaFile只是不起作用。(我尝试了from tools.mediafile import MediaFile和其他几种变体,但都没有成功)。

这里有一个外卖:

代码语言:javascript
复制
ImportError: cannot import name 'MediaFile' from 'tools.mediafile' (unknown location)

当我尝试使用mediafile.MediaFile时,它会给出以下错误:

代码语言:javascript
复制
AttributeError: module 'tools.mediafile' has no attribute 'MediaFile'

知道我哪里错语法了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 11:26:11

命令pip install --target=/path/to/package mypackage将将包安装在您指定的目录中,即在/path/to/package/mypackage中。在您的例子中,可能是在C:/msys64/home/myname/myprogram/tools/mediafile/mediafile

如果是这样的话,您应该能够用以下方式导入它:

代码语言:javascript
复制
from tools.mediafile.mediafile import MediaFile

但是不要这样做-相反,您应该删除它并重新安装

代码语言:javascript
复制
pip install --target="C:/msys64/home/myname/myprogram/tools/" mediafile

那么您应该能够用

代码语言:javascript
复制
from tools.mediafile import Mediafile

正如您已经发现的,上述方法的问题在于,包将期望只使用import dependency导入它们自己的依赖项--它们将不知道您的tools目录。要解决这个问题,并使您自己的导入更容易,您需要将目录添加到您的PYTHONPATH环境变量中。有关如何在Windows中执行此操作,请参见例如this question

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

代码语言:javascript
复制
import sys
sys.path.append("tools")
from mediafile import MediaFile

然而,设置PYTHONPATH是进行此操作的首选方法。

请注意,我假设您删除并重新安装了上面的mediafile,所以您的目录结构应该是:

代码语言:javascript
复制
tools
├── mediafile.py
├── mutagen
├── ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68345992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档