当前位置: 首页 > 知识库问答 >
问题:

如何在python中导入我的个人模块?[重复]

沈建柏
2023-03-14

我的项目的 python 模块有问题。这是我的项目树:

Documents/Projects/projet/
├── code
│   ├── datas
│   │   ├── Lexique383
│   │   │   └── Lexique383.tsv
│   │   └── Lexique383.zip
│   ├── __init__.py
│   ├── __pycache__
│   │   └── __init__.cpython-38.pyc
│   ├── src
│   │   ├── Correcteur.py
│   │   ├── __init__.py
│   │   ├── PoCCode.py
│   │   └── __pycache__
│   │       ├── Correcteur.cpython-38.pyc
│   │       └── __init__.cpython-38.pyc
│   └── ui
│       ├── GUI.py
│       ├── GUI.ui
│       ├── __init__.py
│       ├── Loader.py
│       └── __pycache__
│           └── GUI.cpython-38.pyc

依赖关系如下:

  • GUI.py 使用 Correcteur.py
  • Loader.py 使用 GUI.py

我正在为这个项目使用两台计算机,一台使用PyCharm,一台使用VSCode。问题是我使用PyCharm运行Loader.py配置,它向PYTHONPATH添加了内容根和源根。但是当我回到另一台计算机,想检查一切是否正常时,我遇到了这个错误:

Traceback (most recent call last):
  File "Documents/Projects/projet/code/ui/Loader.py", line 4, in <module>
    import GUI
  File "Documents/Projects/projet/code/ui/GUI.py", line 13, in <module>
    from code.src import Correcteur
ModuleNotFoundError: No module named 'code.src'; 'code' is not a package

所以我试图在我的系统路径中添加“代码”、“src”和“ui”,但我仍然有错误。毫无疑问,我做了一些不适用于sys.path的事情,但我无法弄清楚是什么。你能帮我解决这个问题吗?

编辑:这就是我如何使用路径库将目录添加到我的syspath。
Loader.py:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication
import sys
from pathlib import Path
sys.path.extend([
    Path(__file__).parents[1].resolve(),
    Path(__file__).parents[1].resolve() / "src"
])
print(sys.path)
import GUI

下面是我如何在GUI.py中导入Correcteur:

from code.src import Correcteur

共有1个答案

向泽语
2023-03-14

您添加到< code>sys.path的方法应该有效。主要问题是您正在添加< code>pathlib。Path对象指向< code>sys.path,它只需要字符串。

如果您只是将试图添加的Path对象转换为字符串,那么简化版本的代码应该可以工作:

在Loader.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication
import sys
from pathlib import Path
# Note the call to `str(...)` here
sys.path.insert(1, str(Path(__file__).parents[2].absolute()))
print(sys.path)
import GUI

此外,您得到的一些错误是因为Python有一个名为< code>code的内置模块,它错误地导入了这个模块,所以我建议将您的包更改为不同的名称。

 类似资料:
  • 我在让sikuli python单元测试工作时遇到了麻烦,希望能得到一些帮助。我在网上到处搜索,但是没有任何有用的东西。我的python知识非常有限,我想这没有什么帮助... 我用的是win7 32,sikuli 1.0 rc3 (r905),python 2.7.3 我正在尝试通过python运行sikuli单元测试(不使用命令行,只是作为一个python脚本来运行python gui)。除了别

  • 我是新的Python,我已经安装在C:\ INFO2013-07-08 08:15:47,197server.py:593]默认:"GET/HTTP/1.1"500-INFO2013-07-08 08:28:22,289api_server.py:509]应用所有挂起的事务并保存数据存储INFO2013-07-08 08:28:22,289api_server.py:512]保存搜索索引2013-

  • 问题内容: 我正在尝试在Python 2.7.2中使用并遇到奇怪的错误。 考虑以下目录结构: 具有以下代码: (在真实代码中有一个名称。) 尝试到时,产生以下错误: 我想念什么? 谢谢! 问题答案: 对于相对进口,您必须: a)使用相对名称 b)明确提供锚点 当然,您也可以只执行绝对导入:

  • 我想在任何目录的任何脚本中导入自定义编写的函数,就像在任何脚本中导入请求模块一样。我正在运行Ubuntu和Python 3.9 编辑:我按照本教程完成了我的要求-https://packaging.python.org/tutorials/packaging-projects/

  • 问题内容: 我正在尝试使用该软件包在R中导入python模块。该模块可以在这里找到。我克隆了存储库并运行成功。如果打开python shell,则可以导入。但是,当我尝试将其导入RStudio时,出现以下错误: 我在macOS Sierra版本10.12.6上并通过Anaconda安装了python 3.6。我也尝试过给出python的路径为: 当我从终端运行python时,我得到: 不确定pyt

  • 问题内容: 如何枚举所有导入的模块? 例如,我想从以下代码中获取: 问题答案: 仅获取当前模块的所有导入的一种近似方法是检查globals()模块: 这不会返回本地导入,也不会返回非模块导入,例如。请注意,这将返回,因此如果你使用的话,将获得原始模块名称;如果你想要别名,则使用名称。