【问题标题】:Module not found in same directory as running script when installed as a package当作为包安装时,在与运行脚本相同的目录中找不到模块
【发布时间】:2020-01-27 00:49:59
【问题描述】:

我在包文件夹中使用python setup.py develop 安装了一个名为 pytable 的自定义包。包层次结构如下所示:

  • pytable/
    • __pycache__/
    • MANIFEST.in
    • pytable/
      • __init__.py
      • __pycache__/
      • pytable.py(主模块)
      • tableError.py(有自定义错误的类)
      • testScript.py(导入 pytable.py)
    • README.md
    • setup.py

tableError.py 模块被导入到 pytable.py 模块中,并且在没有使用 python 安装 pytable 的情况下运行 testScript.py 时工作正常,但是当我使用上述命令安装它并在其他任何地方运行 import pytable from pytable 时,它会出错。

ModuleNotFoundError: 没有名为“tableError”的模块

【问题讨论】:

  • 您使用什么命令来运行脚本? python -m pytable.testScript 的结果是什么?
  • @sinoroc 是的。没有 -m。
  • 你试过python -m pytable.testScript吗?对于-m,使用点而不是斜线,没有.py。结果更好吗?
  • @sinoroc 运行 testScript 没有问题,只是导入 pytable 包之外的任何内容。
  • @sinoroc 哦,我明白你要去哪里了。运行“python -m pytable.testScript”错误,“没有名为 pytable.testScript 的模块。

标签: python module package python-packaging


【解决方案1】:

问题是在安装包之后 Python 不知道去哪里寻找依赖的模块。添加...

import os
import sys
dir_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(dir_path)

...到 pytable.py 的顶部告诉 Python 查找 tableError.py 的安装目录。

【讨论】:

  • 这种事情几乎从来没有必要。很可能有更直接和更清洁的解决方案。
  • @sinoroc 同意。不过,这确实有效。如果你发现了什么,请告诉我。
  • 我能想到的一种可能性是,包装可能存在问题。也许编辑您的问题以显示setup.py 的内容。或者查看pip show --files pytable的输出。
猜你喜欢
  • 2016-08-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 2018-07-08
  • 2014-06-09
相关资源
最近更新 更多