binwalk具体安装即环境配置操作可参考这篇博文
http://t.csdnimg.cn/QDaIwhttp://t.csdnimg.cn/QDaIw
问题一:pyinstaller : 无法将“pyinstaller”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1
http://t.csdnimg.cn/LQrXRhttp://t.csdnimg.cn/LQrXR可能会遇到在上面博文“找到保存放路径”这一步,在鼠标移动至相应包上面时没有地址出现,这时你可以直接到你操作的项目地址下,如下图(我操作的文件叫binwalk):
即在右侧蓝框处,我的是 C:\Users\Lenovo\PycharmProjects\binwalk\.venv\Scripts,这个项目文件位置因人而异,但是如果你安装成功了pyinstaller,就一定可以在Script文件下找到pyinstaller.exe。
这时你只需要把包含pyinstaller.exe的文件夹路径添加到环境变量的Path路径中即可(即 C:\Users\Lenovo\PycharmProjects\binwalk\.venv\Scripts【这是我的,你的可能不一样】)
当然如果你是自行安装而不是在pycharm终端中执行pip install pyinstaller,你可以直接在主文件夹下搜索pyinstaller.exe文件,找到其所在文件夹,将该文件夹的完整地址添加到环境变量的Path路径中即可(未尝试过,理论上应该可行)
文件隐藏问题
由于部分文件是系统文件,为防止误操作可能会被隐藏,在你翻阅文件夹的时候可能找不到,但是进行文件搜索的时候,在文件下方文件路径中依然会显示出来。
如果你需要找到这部分文件,可以进行如下操作
1.打开文件夹 - 选项
2. 查看-找到“隐藏文件和文件夹一栏” 选择“显示隐藏的文件、文件夹和驱动器”
添加环境变量过程:(系统变量过程一样,根据需要添加)
1.在windows搜索框中输入“查看高级系统设置”,打开
2.点上面栏“高级”,右下角环境变量,点Path,编辑
3.新建,将刚才的地址粘贴到这一栏,确定
问题二: 输入python setup.py install没反应,可能因为没有安装python
建议安装python3.8以上的,因为最新版的pyinstaller6.3.0支持3.8及以上的
问题三:在我安装完成之后,我再次进行安装出现了这个提示:
PS C:\Program Files\Python311\Lib\site-packages> pip install pyinstaller
Defaulting to user installation because normal site-packages is not writeable
DEPRECATION: Loading egg at c:\program files\python311\lib\site-packages\binwalk-2.3.2-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330
Requirement already satisfied: pyinstaller in c:\users\lenovo\appdata\roaming\python\python311\site-packages (6.3.0)
Requirement already satisfied: setuptools>=42.0.0 in c:\program files\python311\lib\site-packages (from pyinstaller) (65.5.0)
Requirement already satisfied: altgraph in c:\users\lenovo\appdata\roaming\python\python311\site-packages (from pyinstaller) (0.17.4)
Requirement already satisfied: pyinstaller-hooks-contrib>=2021.4 in c:\users\lenovo\appdata\roaming\python\python311\site-packages (from pyinstaller) (2024.0)
Requirement already satisfied: packaging>=22.0 in c:\users\lenovo\appdata\roaming\python\python311\site-packages (from pyinstaller) (23.2)
Requirement already satisfied: pefile>=2022.5.30 in c:\users\lenovo\appdata\roaming\python\python311\site-packages (from pyinstaller) (2023.2.7)
Requirement already satisfied: pywin32-ctypes>=0.2.1 in c:\users\lenovo\appdata\roaming\python\python311\site-packages (from pyinstaller) (0.2.2)
只要用管理员模式打开cmd就可以消除这个:
Defaulting to user installation because normal site-packages is not writeable
但是使用管理员模式后依然有这个警告,但似乎对整体运行没有影响
DEPRECATION: Loading egg at c:\program files\python311\lib\site-packages\binwalk-2.3.2-py3.11.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330
而下面的requirement already satisfied...是说明安装成功了,此时你进行卸载操作(pip uninstall pyinstaller)也是完全可以
这是安装成功的提示:
PS C:\Program Files\Python311\Scripts> pip uninstall pyinstaller
Found existing installation: pyinstaller 6.3.0
Uninstalling pyinstaller-6.3.0:
Would remove:
c:\users\lenovo\appdata\roaming\python\python311\scripts\pyi-archive_viewer.exe//看到这里了吗,此处的appdata就是一个被系统隐藏的文件,你在文件夹中直接看是看不到的,这是我之前安装的位置
c:\users\lenovo\appdata\roaming\python\python311\scripts\pyi-bindepend.exe
c:\users\lenovo\appdata\roaming\python\python311\scripts\pyi-grab_version.exe
c:\users\lenovo\appdata\roaming\python\python311\scripts\pyi-makespec.exe
c:\users\lenovo\appdata\roaming\python\python311\scripts\pyi-set_version.exe
c:\users\lenovo\appdata\roaming\python\python311\scripts\pyinstaller.exe
c:\users\lenovo\appdata\roaming\python\python311\site-packages\pyinstaller-6.3.0.dist-info\*
c:\users\lenovo\appdata\roaming\python\python311\site-packages\pyinstaller\*[Y/n]
能够显示出安装的路径就说明你成功安装了,所以你可以通过卸载操作来判断是否将pyinstaller成功安装
强制指定下载路径导致的问题
但是如果没有成功安装呢
这是我安装失败的提示:
Installing collected packages: altgraph, setuptools, pywin32-ctypes, pefile, packaging, pyinstaller-hooks-contrib, pyinstaller
Successfully installed altgraph-0.17.4 packaging-23.2 pefile-2023.2.7 pyinstaller-6.3.0 pyinstaller-hooks-contrib-2024.0 pywin32-ctypes-0.2.2 setuptools-69.0.3
ERROR: Exception:
Traceback (most recent call last):
File "C:\Program Files\Python311\Lib\shutil.py", line 825, in move
os.rename(src, real_dst)
PermissionError: [WinError 5] 拒绝访问。: 'C:\\Users\\Lenovo\\AppData\\Local\\Temp\\pip-target-0ymwsqhg\\lib\\python\\altgraph' -> 'C:\\Program Files\\Python311\\Scripts\\altgraph'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Program Files\Python311\Lib\site-packages\pip\_internal\cli\base_command.py", line 180, in exc_logging_wrapper
status = run_func(*args)
^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\site-packages\pip\_internal\cli\req_command.py", line 245, in wrapper
return func(self, options, args)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\site-packages\pip\_internal\commands\install.py", line 510, in run
self._handle_target_dir(
File "C:\Program Files\Python311\Lib\site-packages\pip\_internal\commands\install.py", line 569, in _handle_target_dir
shutil.move(os.path.join(lib_dir, item), target_item_dir)
File "C:\Program Files\Python311\Lib\shutil.py", line 841, in move
copytree(src, real_dst, copy_function=copy_function,
File "C:\Program Files\Python311\Lib\shutil.py", line 561, in copytree
return _copytree(entries=entries, src=src, dst=dst, symlinks=symlinks,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\shutil.py", line 459, in _copytree
os.makedirs(dst, exist_ok=dirs_exist_ok)
File "<frozen os>", line 225, in makedirs
PermissionError: [WinError 5] 拒绝访问。: 'C:\\Program Files\\Python311\\Scripts\\altgraph'
此时因为报错内容是:PermissionError: [WinError 5] 拒绝访问。因此我再次使用管理员模式重新安装,没有再出现报错。但是我不确定是否成功安装了,所以我尝试卸载,但此时就提示说:pyinstaller并没有被安装,所以无法卸载,此时就说明,并未成功安装
我在这次报错下采用了强制指定下载路径的方式,即pip install pyinstaller --target="xxx(指定路径)",在这之后我发现pyinstaller.exe出现在了bin文件下面,而不是dist文件下,这似乎是'--target'参数安装包时的发生的意外行为(chatgpt说的),因此不提倡强制指定路径安装
所以我在此之后就把下载的不完全的包手动删掉了(不要学我
问题四:python代码空格问题报错:python: can't open file 'C:\\Program': [Errno 2] No such file or directory
仔细检查后发现确实没有这个文件,上网搜索之后发现是python代码空格的问题
因为我不擅长python,所以只对自己遇到的问题进行说明,详细问题请参考:
http://t.csdnimg.cn/Rey2Zhttp://t.csdnimg.cn/Rey2Z
这是我出错时的代码:
import os
import sys
strl = ' '.join(sys.argv[1:])
command = "python C:\\Program Files\\Python311\\Scripts\\binwalk" + strl
os.system(command)
因为Program后面都被截断了,并且发现在我参考的安装binwalk那篇文章中,binwaik文件的地址并没有出现带有空格的部分,即:
import os
import sysstrl = ' '.join(sys.argv[1:])
command = "python C:\\Python39\\Scripts\\binwalk " + strl
os.system(command)
这里提一嘴,这里的strl是保存binwalk.py文件的文件夹名(务必确保你创建的文件夹名称和代码里一致,且执行成功后不要删除或者更改文件夹名称,以免出现问题)
在没执行pyinstaller --onefile binwalk.py时,应只有binwalk.py一个文件,如下图:
将代码改为如下即可:(注意关键处空格不能缺少,否则导致解析失败)
推荐末尾保留一个空行
import os
import sys
#将命令行参数拼成一个字符串
strl = ' '.join(sys.argv[1:])
#使用引号将包括空格的路径括起来,并拼接成完整的路径
command = 'python "C:\\Program Files\\Python311\\Scripts\\binwalk" ' + strl
#执行命令
os.system(command)
在'pyinstaller --onefile binwalk.py'执行完成后提示successful时,如果将binwalk.exe所在文件夹路径添加到Path之中后,运行 'pyinstaller -h' 依然失败的话,目前我知道的有两种可能:
1.可能还是没有解析成功,请注意问题提示,并检查代码是否符合规范。在修改代码之后,删除之前产生的文件和相应路径后,重复pyinstaller --onefile binwalk.py操作,直到正常产生pyinstaller的操作列表。
【除binwalk.py以外都是新产生的文件】
【说明环境配置成功】
2.环境变量中路径冲突问题,这个我会放在问题五中详细说明
问题五.为什么我在cmd默认路径下可以正常使用'binwalk -h'命令,但是在文件夹的其他地方打开终端就不行呢?
此时很可能出现了环境配置中路径冲突问题
详情参考:Windows 10 / 11 环境变量 (用户变量与系统变量)
http://t.csdnimg.cn/CV3hkhttp://t.csdnimg.cn/CV3hk在这篇博文的"1.5.2Path变量"中提到:
4. Windows 系统在执行用户命令时,若用户未给出文件的绝对路径,则首先在当前目录下寻找相应的可执行文件。然后在系统变量的 path / PATH / Path 路径中查找,如果找不到,再到用户变量的 path / PATH / Path 路径中查找。
Windows 对于 Path 变量的处理方式是,将用户变量的 Path 添加到系统变量 Path 后面。Windows 在查找指令的时候,是按 Path 中的路径从前往后找,直至在某个路径中找到了该指令。如果系统变量 Path 中有对应指令的话,Windows 就不会再去用户变量 Path 中查找。
接下来看我的错误案例:
在windows搜索窗口打开cmd ,输入'binwalk -h',成功打开
在E盘打开cmd, 输入'binwalk -h',失败了
这是怎么回事呢,下面看一下我的环境变量中的用户Path变量和系统Path变量 ;
用户Path
系统变量
再打开cmd,输入'where binwalk',发现有两个不同的binwalk(一个是binwalk.exe,一个是binwalk文件夹),并且binwalk文件夹的路径在系统Path中,会windows系统先查找到它,找到这个binwalk文件夹之后就不会再查找用户Path中的binwalk.exe,自然就运行不了。
怎么解决呢?因为C:\Program Files\Python311\Scripts\这个系统Path路径是安装python时附带装上的,删掉可能导致其他问题;因此在系统变量中再创建一个D:\strl\dist的路径就可以,记得把他放在C:\Program Files\Python311\Scripts\的前面