首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在没有模块错误的包中运行模块

在没有模块错误的包中运行模块
EN

Stack Overflow用户
提问于 2015-11-30 20:54:43
回答 3查看 156关注 0票数 0

我想像这样组织我的python项目:

代码语言:javascript
运行
复制
/proj
   /test
      __init__.py
      test.py
   /utils
      __init__.py
      util.py

test.py内部,我必须从utils.util导入一个类

from utils.util import classA

但是,当我在test.py目录中运行/proj时,会出现一个错误:

代码语言:javascript
运行
复制
$ python test/test.py 
Traceback (most recent call last):
  File "test/test.py", line 1, in <module>
    from utils.util import classA
ImportError: No module named utils.util

但是,如果我做了这些更改,代码就会运行良好(python test.py)

代码语言:javascript
运行
复制
/proj
   test.py
   /utils
      __init__.py
      util.py

我非常希望能够像在第一个示例中那样组织我的代码,而不会出现错误。我怎样才能让自己做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-30 21:20:48

您可以将其作为一个包运行。

代码语言:javascript
运行
复制
python -m test.test
票数 2
EN

Stack Overflow用户

发布于 2015-11-30 21:21:31

如何导入工作

当您试图导入一个模块时,Python会通过PYTHONPATH中的目录进行搜索,查找要导入的模块。

因此,在编写from utils.util import classA时,它会查找名为utils的目录,其中包含文件util.py (和__init__.py,但这是另一个问题)。目录utils必须位于您的PYTHONPATH上。

在您的案例中发生了什么,

如果您将其放在脚本中,您可以看到您的路径是什么:

代码语言:javascript
运行
复制
import sys
print sys.path

当您打印它时,您可能会看到它保持一个空字符串''。这意味着脚本(test.py)所在的目录。因此,如果utils目录位于与test.py相同的位置,Python将能够找到它。否则就不会了。

如何修复它

确保utils在路上。做这件事有不同的方法。

  • 将您的条目脚本放在根中(如您的示例中的示例那样);或
  • 在运行PYTHONPATH之前将根目录添加到python test.py环境变量
  • 在导入任何内容之前,从sys.path中将根目录从test.py中添加到

编辑:或者,正如萨扬所写的:

  • python -m test.test的形式运行它(从根目录执行此操作)
票数 2
EN

Stack Overflow用户

发布于 2015-11-30 21:06:42

您可以进行模块相对导入。尝试:

代码语言:javascript
运行
复制
from ..utils.util import classA

在你的test.py

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

https://stackoverflow.com/questions/34007825

复制
相关文章

相似问题

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