【问题标题】:Adding a module to an existing library将模块添加到现有库
【发布时间】:2020-04-11 13:01:04
【问题描述】:

我最近安装了一个library,它创建了一个包含各种python3脚本的目录和子目录。

让我们关注目录

/Users/username/TeNPy/tenpy/models

这包含一些预制模块,例如一个名为 toric_code.py 的模块,其中包含“ToricCode”类。

如果我运行一个包含的脚本(例如,我们称之为test.py,位于我的桌面上)

from tenpy.models.toric_code import ToricCode

这工作得很好,我没有错误。

现在我创建了一个新脚本,将其命名为 test_module.py 并复制粘贴了 toric_code.py 脚本。两者之间的内容完全相同。现在我把 test_module.py 和 toric_code.py 放在同一个目录下。

如果我跑了

from tenpy.models.test_module import ToricCode

我得到了错误

ModuleNotFoundError: No module named 'tenpy.models.test_module'

TL;DR - 如何让我安装的库将我自己的脚本之一作为模块读取?。

【问题讨论】:

  • 您确定您编辑的目录正确吗?当我在我的机器上执行相同的过程时,它可以正常工作。如果是import sys; print(sys.path),是否包含/Users/username
  • 实际上——考虑到你说文件夹的名称是teNPy 大写,它几乎肯定不会从那个文件夹加载库——Python 的库加载是区分大小写的,IIRC。
  • 如何让库读取您自己的脚本?它已经写好了,即使你把它放在同一个目录下它也不知道你的脚本......
  • “如果我跑步”是什么意思?请在问题中展开。您正在使用失败的导入运行什么脚本?脚本在哪里?
  • 感谢您的评论。我更新了问题。脚本 test.py 仅包含“from tenpy.models.toric_code import ToricCode”,我已将其放在桌面上。这工作正常。如果我将其更改为“from tenpy.models.test_module import ToricCode”,则会收到有关模块不存在的错误。

标签: python python-3.x python-module


【解决方案1】:

这取决于您从何处运行此代码。提供目录结构会有所帮助。

看起来问题是您试图从中导出类的文件夹不在 PYTHONPATH 中。如果您想查看 PYTHONPATH 中的内容,可以使用:

import sys

print(sys.path)

您可以将其添加到代码的顶部,以根据模块对其进行调试,并查看您的 PYTHONPATH 是什么样的。

您需要在要从中导入代码的文件夹中添加一个名为__init__.py 的文件(通常为空,但并非总是如此)。

这是了解导入模块工作原理的绝佳指南:

Definite Guide To Python Imports

或者,您也可以在代码顶部添加以下代码:

import sys
import os

sys.path.append(os.path.join(os.pardir, os.path.abspath(os.path.dirname(__file__))))
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), os.pardir, os.pardir))

如果您要添加上面的代码,则不必执行以下操作:

from <folder>.file import <class/method>

但你可以使用:

from file import <class/method>

【讨论】:

  • 感谢您的回答。我注意到,如果我只是更改其中一个现成模块的名称,然后键入
猜你喜欢
  • 2018-06-14
  • 2011-07-10
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多