0

我有两个简单的文件:main.py 和 config_cowsay.py

主文件

import cowsay
import config_cowsay

char = config_cowsay.choose_character()
print(char)
print(cowsay.get_output_string(char, "Raptors are evil"))

config_cowsay.py

from random import *

def choose_character():
    n = randint(1, 3)
    switch = {
        1: "trex",
        2: "cow",
        3: "stegosaurus",
    }
    return switch.get(n, "daemon")

如果我运行 main.py,程序会正确执行。现在我需要将 config_cowsay 转换为 pyd 文件,并且仍然可以从 main.py 调用它。我使用 MSYS MinGW 32 位和 makefile 来完成它(链接 makefile 不会为问题解决增加任何东西,但如果需要我可以这样做)。从 MSYS MinGW 32 位终端执行我的 Makefile 会生成一个文件夹,其中包含以前的 main.py 和旁边的 config_cowsay.pyd。它还生成一个 main.exe 作为另一个文件夹中的一个可执行文件。

 root  
   |-src
      |-main.py
      |-config_cowsay.py
   |-test_cowsay
      |-main.py
      |-config_cowsay.pyd 
   |-dist
      |-main.exe

所以现在,如果我从 powershell 终端运行 exe,程序运行完美。如果我使用MSYS MinGW 32 位终端运行 config_cowsay.pyd 旁边的 main.py 文件,则 main.py 脚本可以使用 pyd 模块完美执行,而无需更改 main.py 代码中的任何内容。但是,如果我尝试使用 python main.py 在我的 powershell 终端上运行 main.py ,我会收到一条错误消息,告诉我模块 config_cowsay 不存在。

未找到模块

我已经尝试了我能找到的关于这个主题的一切。将 pyd 文件添加到 sys.path 变量,编辑 PYTHONPATH 环境变量,将 pyd dll 移动到 site-package 或 DLLs python 文件夹,将 config_cowsay.pyd 重命名为 config_cowsay_p.pyd 等...

我确保 MSYS 的环境与我的计算机相同,相同的 python 版本 3.8.9 32 位安装了相同的模块等......所以它不应该是 python 版本问题。最重要的是,从我的 powershell 终端运行输出 main.exe 可以工作,这意味着我的计算机环境应该与我用来生成 pyd dll 的 MSYS 兼容。

如果您需要更多详细信息,请告诉我。谢谢你的帮助!

4

1 回答 1

0

我通过阅读 MSYS 环境并直接使用我的计算机 python 环境来让它工作。我在计算机上全局安装了 python 并使用了安装文件(https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html)而不是makefile。

于 2021-08-25T07:58:13.007 回答