导入Cython.pyd文件时,模块未找到错误



我知道这似乎是一个重复的问题,但我真的找不到我做错了什么。。。我写了一个.pyx文件,以便用cython将其编译成.pyd。长话短说,它很好地编译了我的文件,并创建了一个.pyd文件。然而,当我尝试导入.pyd文件时,我收到一个错误,说No module named:;模块名称";。注意,这是我第一次尝试cython。。。

我在windows 10上使用venv和python3.9。我已经安装了cython和minGW。要将其编译到.pyd文件中,我建议在命令提示符中键入与.pyx文件相同的目录:

python setup.py build_ext--就地

这是我的setup.py文件,用于cythonize我的.pyx文件:

from setuptools import setup, Extension
from Cython.Build import cythonize
extensions = [Extension('negamax_cy', ['negamax_cy.pyx'])]
setup(ext_modules=cythonize(extensions, language_level=3))

这是我的.pyx文件:

from connect4.constants import COLS, ROWS
from .position import Position
cdef int COLUMN_ORDER[7]
cdef int x
for x in range(COLS):
COLUMN_ORDER.append(COLS // 2 + (1 - 2 * (x % 2)) * (1 + x) // 2)

cpdef int negamax(pos, int depth, int alpha, int beta):
if pos.can_win():   # Check if current player can win this move
return 1000 - pos.moves*2
cdef long next_move = pos.possible_non_loosing_moves()
if next_move == 0:              # Check for moves which are not losing moves
return -1000 + pos.moves    # If we have 2 or more forcing moves we lose
if depth == 0:  # Check if we have reached max depth
return 0
if pos.moves == ROWS * COLS:  # Check for a draw game
return 0
cdef int col = 0
for col in COLUMN_ORDER[col]:
if next_move & Position.column_mask(col):
pos_cp = Position(position=pos)
pos_cp.play_col(col)
score = -negamax(pos_cp, depth - 1, -beta, -alpha)
if score >= beta:
return score
alpha = max(alpha, score)
return alpha

我的项目结构如下(我正试图在pygame中用人工智能做一个connect4游戏(:

connect4
/venv
/ai
__init__.py
setup.py
file_where_pyd_is_imported.py
negamax_cy.pyx
negamax_cy.pyd
negamax_cy.c
/connect4
__init__.py
other_files.py
__init__.py
main.py

请注意,main.py导入file_where_pyd_is_imported.py

当我导入时,我只需键入:

import negamax_cy

这就是我得到的错误:

Traceback (most recent call last):
File "D:UsersdallaDocumentsCoding Projectspythongamesconnect4main.py", line 5, in <module>
from ai.negamax import mp_best_move, best_move, print_avg
File "D:UsersdallaDocumentsCoding Projectspythongamesconnect4ainegamax.py", line 7, in <module>
import negamax_cy
ModuleNotFoundError: No module named 'negamax_cy'

正如我所说,我不知道出了什么问题。也许这与我的项目结构有关,或者与我的setup.py文件有关,但我不确定。。。如果有人有想法,请告诉我。

事实证明我真的很愚蠢,在python3中我必须像这样上传:

from . import negamax_cy

很抱歉浪费了任何人的时间。。。

相关内容

  • 没有找到相关文章

最新更新