鱼C论坛

 找回密码
 立即注册
查看: 3495|回复: 14

[已解决]自己编译出的pyd怎么导入?

[复制链接]
发表于 2023-2-3 18:05:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 陶远航 于 2023-2-3 20:57 编辑

我编译了这样一个pyd:
https://www.123pan.com/s/J1LlVv-GvoXv
提取码:1111
就是用户登录6.0的那个
如图,放在同一目录还可以运行

                               
登录/注册后可看大图

放在site-package中也可以正常导入

                               
登录/注册后可看大图

但是为什么打包成exe就无法导入了(我说的是那个py文件,不是pyd)
如图

                               
登录/注册后可看大图

求助
最佳答案
2023-2-3 21:20:57
陶远航 发表于 2023-2-3 21:06
还是不行,请详细说一下
或者文件在下面,帮我打包
成功后告诉我怎么打包的。谢谢

我的打包命令:
pyinstaller -F -w "user login.py" --hiddenimport tkinter --hiddenimport tkinter.messagebox --hiddenimport easygui

评分

参与人数 2荣誉 -3 鱼币 -1 收起 理由
liuhongrun2022 -2 这是提问,不要恶搞他人,否则你会失去获得.
Mike_python小 -1 -1 你提问呢还是整人呢?

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-3 19:00:54 | 显示全部楼层
1. 请把你的报错信息发全
2. 这个帖子是提问帖,不是吹水帖,你作为提问者能不能有一些基本的尊重,别***坑人
3. 建议把“求评分”那一行删掉,这又不是什么优质帖子,而且优质帖子即使你不求评分别人也是会给你评分的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-3 19:05:15 | 显示全部楼层
本帖最后由 人造人 于 2023-2-3 19:06 编辑

首先,看看这个吧
https://github.com/ruby-china/Ho ... ter/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.py  spam.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.py  spam.c  spam.so
sh-5.1$ ./main.py
main.py  spam.c  spam.so
hello world!
sh-5.1$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-3 19:12:02 | 显示全部楼层
不要把你编译好的文件放到标准库目录下面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-3 19:52:36 | 显示全部楼层
我打包了没有问题,说清楚点,你是怎么打包的,

或者你把你打包好后的可执行文件和 pyinstaller 生成的 .spec 文件放上来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-3 20:15:36 | 显示全部楼层
求评分删掉
at人删掉
这是求助帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-3 20:26:23 | 显示全部楼层
你是不是在 login.py 加了这一行代码? from login import main

不能自己导入自己,你另外开一个文件来导入 login
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-3 21:06:31 | 显示全部楼层
isdkz 发表于 2023-2-3 20:26
你是不是在 login.py 加了这一行代码? from login import main

不能自己导入自己,你另外开一个文件来 ...

还是不行,请详细说一下
或者文件在下面,帮我打包
成功后告诉我怎么打包的。谢谢
login.pyd.txt (197 KB, 下载次数: 1)

user login.py.txt (30 Bytes, 下载次数: 1)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-3 21:20:57 | 显示全部楼层    本楼为最佳答案   
陶远航 发表于 2023-2-3 21:06
还是不行,请详细说一下
或者文件在下面,帮我打包
成功后告诉我怎么打包的。谢谢

我的打包命令:
pyinstaller -F -w "user login.py" --hiddenimport tkinter --hiddenimport tkinter.messagebox --hiddenimport easygui
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-3 21:31:19 | 显示全部楼层
陶远航 发表于 2023-2-3 21:06
还是不行,请详细说一下
或者文件在下面,帮我打包
成功后告诉我怎么打包的。谢谢

你是怎么打包的没有描述出来,所以没有办法帮你找出你打包失败的原因

但是我可以说你那个报错是因为循环导入

循环导入就是 A 导入了它自己,或者 A 导入了 B 同时 B 也导入了 A

你发出来的那两个文件没有这样的问题,所以我想不通你是怎么出错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-4 08:28:12 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-2-3 21:31
你是怎么打包的没有描述出来,所以没有办法帮你找出你打包失败的原因

但是我可以说你那个报错是因为循 ...

我是pyinstaller  -F .\"user login.py"
这样打包成功,但报错。但是为什么你后面加了那么一长串,就可以打包成功且不报错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 08:48:57 | 显示全部楼层
本帖最后由 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 的错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 10:41:54 | 显示全部楼层
你要是来这里搞人我建议你出门左转
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-4 11:02:22 | 显示全部楼层
isdkz 发表于 2023-2-4 08:48
我加后面那一长串并不是因为循环导入的问题,但是你放的截图的报错信息是循环导入的问题

我加后面那 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-4 11:09:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表