我正在尝试打包我编写的 python 程序/脚本(pastebin 链接),其中包含使用 tkinter 模块的 GUI。我决定使用 Pyinstaller,据他们说它支持 Python 3.7。
目前,尝试运行 pyinstaller 在实际打包时似乎不会产生任何问题。在我尝试运行可执行文件之后,它失败了。一个我生成可执行文件的一个文件变体,它只是打开一个命令提示符并挂起。当我执行非一个文件命令时,它会立即打开和关闭,但会给出错误输出,由于关闭速度太快,我看不到该输出。我直接在 cmd 中打开了可执行文件来解决这个问题,它给了我这个错误:
C:\Users\mqian\Desktop\CGIProject\autoprimercode\windowsversion\build\windowsaut
oprimer>windowsautoprimer.exe
Error loading Python DLL 'C:\Users\mqian\Desktop\CGIProject\autoprimercode\windo
wsversion\build\windowsautoprimer\python37.dll'.
LoadLibrary: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
我不知道它是否应该在这个文件夹中寻找 python37.dll,但是,我有一个好主意,将 dll 从 python 目录复制到跟踪指定的一个(显然它不应该有变成那样)。现在我得到的错误是这样的:
C:\Users\mqian\Desktop\CGIProject\autoprimercode\windowsversion\build\windowsaut
oprimer>windowsautoprimer.exe
Traceback (most recent call last):
File "site-packages\PyInstaller\loader\rthooks\pyi_rth__tkinter.py", line 28,
in <module>
FileNotFoundError: Tcl data directory "C:\Users\mqian\Desktop\CGIProject\autopri
mercode\windowsversion\build\windowsautoprimer\tcl" not found.
[6600] Failed to execute script pyi_rth__tkinter
Run Code Online (Sandbox Code Playgroud)
无休止的谷歌搜索并没有产生任何具体的结果。以下是一些我认为可能会有所帮助的相关链接。
https://github.com/pyinstaller/pyinstaller/issues/2149
https://www.xoolive.org/2015/09/09/issues-on-loading-dlls-with-pyinstaller.html
PyInstaller:“没有名为 Tkinter 的模块”
https://github.com/pyinstaller/pyinstaller/issues/2495
为pyinstaller加载python27.dll错误时出错
这是我拥有的规范文件:
# -*- mode: python -*- …Run Code Online (Sandbox Code Playgroud) 在尝试实现我自己版本的C函数memccpy()时,我也遇到了另一个人在堆栈溢出时对memccpy()的实现,并测试了他们的变体与原始版本.它再现了与C标准函数相同的结果,我给出了不同的字符串和整数数组输入.问题是我不明白为什么他们的版本不会对某些输入(例如此整数数组)进行分段.
我试着看看如果长度超过输入数组的长度会发生什么.当然我期待一个段错误,但令我惊讶的是它没有.这是函数实现:
void *ft_memccpy(void *str_dest, const void *str_src, int c,
size_t n)
{
unsigned int i;
char *dest;
char *src;
char *ptr;
dest = (char *)str_dest;
src = (char *)str_src;
i = 0;
ptr = 0;
while (i < n && ptr == 0)
{
dest[i] = src[i];
if (src[i] == ((char)c))
ptr = dest + i + 1;
i++;
}
return (ptr);
}
Run Code Online (Sandbox Code Playgroud)
用于测试它的代码:
int main()
{
int num1[5] = {1, 2, 3, 4, 5}; …Run Code Online (Sandbox Code Playgroud)