如何在 python 中导入我的个人模块?
How can I import my personnal modules in python?
我的 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
我正在为这个项目使用 2 台计算机,一台 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
所以我尝试将“code”、“src”和“ui”添加到我的系统路径中,但我仍然遇到错误。
毫无疑问,我做了一些不适用于 sys.path 的事情,但我不知道是什么。你能帮我解决这个问题吗?
编辑:
这就是我使用 pathlib 将目录添加到我的系统路径的方式。
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
您添加到 sys.path
的方法应该有效。主要问题是您将 pathlib.Path
个对象添加到 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
的内置模块,它是错误导入的,所以我建议您更改您的包以使用不同的名字.
我的 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
我正在为这个项目使用 2 台计算机,一台 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
所以我尝试将“code”、“src”和“ui”添加到我的系统路径中,但我仍然遇到错误。 毫无疑问,我做了一些不适用于 sys.path 的事情,但我不知道是什么。你能帮我解决这个问题吗?
编辑:
这就是我使用 pathlib 将目录添加到我的系统路径的方式。
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
您添加到 sys.path
的方法应该有效。主要问题是您将 pathlib.Path
个对象添加到 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
的内置模块,它是错误导入的,所以我建议您更改您的包以使用不同的名字.