首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建python包

创建python包
EN

Stack Overflow用户
提问于 2020-05-18 20:59:29
回答 1查看 24关注 0票数 0

我创建了一个名为orderbook.py的py文件,其中包含一个名为OrderbookLoader的类。所有内容都在一个名为loaders的目录中。我将该路径添加到ipythonpath中,因此如下所示:/home/ec2-user/SageMaker/research/data_manager/loaders在我的目录中,我还有多个其他文件:

但是,当我转到根目录并尝试执行以下操作时:from loaders.orderbook import OrderbookLoader,它抛出以下错误消息:ModuleNotFoundError: No module named 'loaders.orderbook'; 'loaders' is not a package

但我可以执行以下操作:from loaders import OrderbookLoader,它是loaders.py文件中的一个类。你知道我做错了什么吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-05-18 21:31:25

这与您的工作目录(未在您的问题中指定)、Python路径(也未指定)和假定的包目录中的文件之间的交互有关。

要使目录成为包,您应该:

Python

  • 确保它直接驻留在Python路径(sys.path).

  • Ensure中的一个目录中,该目录包含一个名为__init__.py的文件(正如您所做的那样)。该文件可能为空,或者包含合法的Python代码。

这里可能发生的情况是,您将目录loaders本身作为Python路径的一部分。如果您添加了它的父目录(就像您应该做的那样),那么它可能被放在loaders之后。接下来发生的事情是,当Python尝试导入loaders时,它会在loaders目录中导入文件loaders.py,然后在其父目录中找到loaders包目录。这意味着指定给导入机制的loaders引用的是模块,而不是包,这就是您两次import尝试的结果。

将模块放置在包中不是一个好主意,因为它可能会导致您在这里遇到的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61870168

复制
相关文章

相似问题

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