我正在使用 pyinstaller 在 Windows 上创建 exe 文件。我创建了基于 anaconda 的虚拟环境“py38”,在其中安装了所有软件包。我正在尝试转换 tkinter 文件,即“gui.py”。当我使用正常运行时
python gui.py
Run Code Online (Sandbox Code Playgroud)
命令,它工作得很好。但是使用 pyinstaller 似乎找不到我使用以下两个命令安装的模块“paddle”。
python -m pip download paddlepaddle==2.1.2 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/noavx/stable.html --no-index --no-deps
python -m pip install [name].whl
Run Code Online (Sandbox Code Playgroud)
我一直在使用python 3.8。我已经使用了几乎所有可以在网上找到的解决此问题的解决方案。
我尝试过的命令来修复它
pyinstaller --paths 'C:\\Users\\user\\anaconda3\\envs\\py38\\lib\\site-packages' --onefile --clean gui.py
pyinstaller --paths 'C:\\Users\\user\\anaconda3\\envs\\py38\\lib\\site-packages' --onedir gui.py
pyinstaller --hidden-import 'paddle' --onefile --clean gui.py
pyinstaller --hidden-import 'paddlepaddle' --onefile --clean gui.py
pyinstaller --hidden-import 'paddlepaddle' --onedir --clean gui.py
Run Code Online (Sandbox Code Playgroud)
当我使用时--onedir,生成的exe文件也会在启动后立即关闭。当我运行指定“--paths”的 pyinstaller 时,完整日志如下所示
>pyinstaller --paths 'C:\\Users\\user\\anaconda3\\envs\\py38\\lib\\site-packages' --onefile --clean gui.py
586 INFO: PyInstaller: 4.5.1
587 INFO: Python: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 bash 中使用 bc 以浮点形式输出结果。但是我得到以下代码的以下输出。我如何从这里获得乘法结果以及为什么我找不到命令。
#!/bin/bash
v1=3.41
v2=45
v3= $(bc <<< "scale=4;$v1 + $v2")
echo $v3
v3= $(bc <<< "scale=4;$v1 - $v2")
echo $v3
v3= $(bc <<< "scale=4;$v1 / $v2")
echo $v3
v3= $(bc <<< "scale=4;$v1 % $v2")
echo $v3
v3 = $(bc <<< "scale=4;$v1 * $v2")
echo $v3
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下:
mint@mint ~ $ bash bc.sh
bc.sh: line 4: 48.41: command not found
bc.sh: line 6: -41.59: command not found
bc.sh: line 8: .0757: command not found
bc.sh: line 10: .0035: …Run Code Online (Sandbox Code Playgroud) 在浏览了一下之后,我发现这个代码用于使用Sieve of Eratostenes在线性时间内计算Euler的phi值.但是没能理解这个代码中使用的主要逻辑,特别是在内部for循环和在这个循环中使用的想法中做了什么.计算phi值.如果有人帮我理解这段代码会很有帮助.
#define MAXN 3000000
int phi[MAXN + 1], prime[MAXN/10], sz;
bitset <MAXN + 1> mark;
for (int i = 2; i <= MAXN; i++ ){
if(!mark[i]){
phi[i] = i-1;
prime[sz++]= i;
}
for (int j=0; j<sz && prime[j]*i <= MAXN; j++ ){
mark[prime[j]*i]=1;
if(i%prime[j]==0){
phi[i*prime[j]] = phi[i]*prime[j];
break;
}
else phi[i*prime[j]] = phi[i]*(prime[j]-1 );
}
}
Run Code Online (Sandbox Code Playgroud)