在我的乐高 ev3 机器人上,我当前的项目是将 pygame 操纵杆模块添加到我的机器人中并使其正常工作,以便我可以使用我的 PS1 遥控器来控制乐高 ev3 机器人。我已经将 python 中的站点包中的整个文件夹放到我的机器人上,我没有收到错误no module named pygame
但我收到错误no module named pygame.base
和许多其他类似no module named pygame.constants
。
我查看了机器人的日志文件,该文件显示了代码在运行机器人时出现的文件上可能存在的错误。我尝试通过我的计算机运行机器人python文件,我也尝试过通过机器人本身都会导致相同的错误。
我尝试过在我的计算机上运行相同的pygame,使用我自己的python游戏与pygame一起尝试创建,并且该游戏工作正常,没有导入错误。
我已经尝试查看 pygame 的__init__.py
代码,错误来自哪里,出现所有错误的代码如下所示:
pygame__init__.py
中的代码有一些导入,我认为错误来自:
from pygame.base import *
from pygame.constants import *
from pygame.version import *
from pygame.rect import Rect
from pygame.compat import geterror, PY_MAJOR_VERSION
from pygame.rwobject import encode_string, encode_file_path
import pygame.surflock
import pygame.color
Color = color.Color
import pygame.bufferproxy
BufferProxy = bufferproxy.BufferProxy
import pygame.math
当我在机器人上或通过Visual Studio代码运行代码时,实际输出为:
Traceback (most recent call last):
File "/home/robot/drive/main.py", line 10, in <module>
File "/home/robot/drive/pygame/__init__.py", line 136, in <module>
ImportError: no module named 'pygame.base'
图片
Python 具有列表sys.path
,其中包含在其中查找模块的文件夹。有文件夹site-packages
所以import
可以在site-packages/pygame
中找到pygame
,在site-packages/pygame/base
中找到pygame.base
如果pygame
移动到文件夹/home/robot/drive
则必须在导入之前将其添加到sys.path
import sys
sys.path.append('/home/robot/drive/')
import pygame
然后它可以在/home/robot/drive/pygame
中找到pygame
,在/home/robot/drive/pygame/base
中找到pygame.base
通常,Python 会在运行代码的文件夹中查找模块,以便import pygame
无需将文件夹添加到sys.path
即可找到/home/robot/drive/pygame
,但__init__.py
在文件夹/home/robot/drive/pygame
中运行,因此from pygame.base import *
会查找/home/robot/drive/pygame/pygame/base
并且路径中有很多pygame
。如果它使用相对路径from .base import *
那么它将搜索/home/robot/drive/pygame/./base
这意味着/home/robot/drive/pygame/base
,因此它将使用正确的路径,并且无需将文件夹添加到sys.path