我有两个简单的文件: main.py和config_cowsay.py
main.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,程序就会运行得很完美。如果我使用main.py MSYS MinGW 32位终端运行config_cowsay.pyd旁边的文件,那么main.py脚本将使用pyd模块完美地执行,而无需更改main.py代码中的任何内容。但是,如果我试图使用使用python main.py运行的powershell终端来运行main.py,就会发现一个错误,它告诉我模块config_cowsay不存在。

我已经试过了在这个问题上能找到的一切。将pyd文件添加到sys.path变量,编辑PYTHONPATH环境变量,将pyd dll移动到站点包或dll python文件夹,将config_cowsay.pyd重命名为config_cowsay_p.pyd等。
我确保MSYS的环境与我的计算机相同,相同的python版本3.8.9 32位,安装了相同的模块等等。所以这不应该是python版本的问题。最重要的是,运行我的powershell终端的输出main.exe,这意味着我的计算机环境应该与我用来生成pyd的MSYS兼容。
如果你需要更多细节,请告诉我。谢谢你的帮忙!
发布于 2021-08-25 07:58:13
我通过阅读MSYS环境并直接使用我的计算机python环境来工作。我在计算机上全局安装了python,使用了安装文件(https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html)而不是makefile。
https://stackoverflow.com/questions/68118085
复制相似问题