自己编译出的pyd怎么导入?
本帖最后由 陶远航 于 2023-2-3 20:57 编辑我编译了这样一个pyd:
https://www.123pan.com/s/J1LlVv-GvoXv
提取码:1111
就是用户登录6.0的那个
如图,放在同一目录还可以运行
https://i.328888.xyz/2023/02/03/N4FFa.png
放在site-package中也可以正常导入
https://i.328888.xyz/2023/02/03/N45xL.png
但是为什么打包成exe就无法导入了(我说的是那个py文件,不是pyd)
如图
https://i.328888.xyz/2023/02/03/N4L85.png
求助
1. 请把你的报错信息发全
2. 这个帖子是提问帖,不是吹水帖,你作为提问者能不能有一些基本的尊重,别***坑人
3. 建议把“求评分”那一行删掉,这又不是什么优质帖子,而且优质帖子即使你不求评分别人也是会给你评分的。 本帖最后由 人造人 于 2023-2-3 19:06 编辑
首先,看看这个吧
https://github.com/ruby-china/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md
然后,下面是一个简单的演示
参考
https://docs.python.org/zh-cn/3/extending/extending.html
https://docs.python.org/zh-cn/3/extending/building.html#building
sh-5.1$ ls
main.pyspam.c
sh-5.1$ cat spam.c
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <stdlib.h>
static PyObject *spam_system(PyObject *self, PyObject *args) {
const char *command;
if(!PyArg_ParseTuple(args, "s", &command)) return NULL;
int ret = system(command);
return PyLong_FromLong(ret);
}
static PyMethodDef methods[] = {
{"system",spam_system, METH_VARARGS, "Execute a shell command."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
"spam",
NULL,
-1,
methods
};
PyObject *PyInit_spam(void) {
return PyModule_Create(&spammodule);
}
sh-5.1$ cat main.py
#!/usr/bin/env python
#coding=utf-8
import spam
spam.system('ls')
spam.system("echo 'hello world!'")
sh-5.1$ gcc -g -Wall -shared -I /usr/include/python3.10 -o spam.so spam.c
sh-5.1$ ls
main.pyspam.cspam.so
sh-5.1$ ./main.py
main.pyspam.cspam.so
hello world!
sh-5.1$
不要把你编译好的文件放到标准库目录下面
我打包了没有问题,说清楚点,你是怎么打包的,
或者你把你打包好后的可执行文件和 pyinstaller 生成的 .spec 文件放上来 求评分删掉
at人删掉
这是求助帖
你是不是在 login.py 加了这一行代码? from login import main
不能自己导入自己,你另外开一个文件来导入 login isdkz 发表于 2023-2-3 20:26
你是不是在 login.py 加了这一行代码? from login import main
不能自己导入自己,你另外开一个文件来 ...
还是不行,请详细说一下
或者文件在下面,帮我打包
成功后告诉我怎么打包的。谢谢
陶远航 发表于 2023-2-3 21:06
还是不行,请详细说一下
或者文件在下面,帮我打包
成功后告诉我怎么打包的。谢谢
我的打包命令:
pyinstaller -F -w "user login.py" --hiddenimport tkinter --hiddenimport tkinter.messagebox --hiddenimport easygui 陶远航 发表于 2023-2-3 21:06
还是不行,请详细说一下
或者文件在下面,帮我打包
成功后告诉我怎么打包的。谢谢
你是怎么打包的没有描述出来,所以没有办法帮你找出你打包失败的原因
但是我可以说你那个报错是因为循环导入
循环导入就是 A 导入了它自己,或者 A 导入了 B 同时 B 也导入了 A
你发出来的那两个文件没有这样的问题,所以我想不通你是怎么出错的 isdkz 发表于 2023-2-3 21:31
你是怎么打包的没有描述出来,所以没有办法帮你找出你打包失败的原因
但是我可以说你那个报错是因为循 ...
我是pyinstaller-F .\"user login.py"
这样打包成功,但报错。但是为什么你后面加了那么一长串,就可以打包成功且不报错? 本帖最后由 isdkz 于 2023-2-4 08:56 编辑
陶远航 发表于 2023-2-4 08:28
我是pyinstaller-F .\"user login.py"
这样打包成功,但报错。但是为什么你后面加了那么一长串,就可 ...
我加后面那一长串并不是因为循环导入的问题,但是你放的截图的报错信息是循环导入的问题
我加后面那一长串的原因是:
因为你把 login.py 编译成了 login.pyd,所以 pyinstaller 无法分析出 login.pyd 中导入了什么库,
login.pyd 中需要的库也就不会一起打包,所以就得通过 --hiddenimport 来告诉他哪些库需要导入
如果不加 --hiddenimport 的话运行会报 Module Not Found 的错 你要是来这里搞人我建议你出门左转 isdkz 发表于 2023-2-4 08:48
我加后面那一长串并不是因为循环导入的问题,但是你放的截图的报错信息是循环导入的问题
我加后面那 ...
谢谢 陶远航 发表于 2023-2-4 11:02
谢谢
不客气{:5_109:}
页:
[1]