鱼C论坛

 找回密码
 立即注册
查看: 214|回复: 7

[已解决]Pyinstall打包一直报IsADirectoryError: [Errno 21] Is a directory: '/usr/local/...

[复制链接]
发表于 2024-8-30 16:40:27 | 显示全部楼层 |阅读模式

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

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

x
打包py文件只有1行代码print("hello world")
排查过环境变量,没看出问题


完整报错:Traceback (most recent call last):
  File "/usr/local/bin/pyinstaller", line 33, in <module>
    sys.exit(load_entry_point('pyinstaller==5.13.2', 'console_scripts', 'pyinstaller')())
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/__main__.py", line 194, in _console_script_run
    run()
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/__main__.py", line 180, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/__main__.py", line 61, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/build_main.py", line 1019, in main
    build(specfile, distpath, workpath, clean_build)
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/build_main.py", line 944, in build
    exec(code, spec_namespace)
  File "/Users/yy/Documents/interface/testPy/dyhProject1/base/in/demo17.spec", line 43, in <module>
    entitlements_file=None,
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/api.py", line 582, in __init__
    entitlements_file=self.entitlements_file
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/api.py", line 240, in __init__
    self.__postinit__()
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/datastruct.py", line 184, in __postinit__
    self.assemble()
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/api.py", line 300, in assemble
    strict_arch_validation=(typecode == 'EXTENSION'),
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/utils.py", line 219, in checkCache
    digest = cacheDigest(fnm, redirects)
  File "/usr/local/lib/python3.7/site-packages/PyInstaller/building/utils.py", line 402, in cacheDigest
    with open(fnm, "rb") as f:
IsADirectoryError: [Errno 21] Is a directory: '/usr/local/Python3'

跪求解决方案
最佳答案
2024-8-30 17:51:53
天下第一小可爱 发表于 2024-08-30 17:51
1.之前排查过环境变量PATH没有问题
echo $PATH
/Us ...


根据你描述的错误和排查情况,我有几个可能的解决方案:

1. **重装PyInstaller和依赖项**:
   尝试重新安装PyInstaller和所有相关依赖项,包括Python本身。

pip uninstall pyinstaller
   pip install pyinstaller

2. **调整路径中的'python3'项**:
   `PATH` 环境变量中有一项是 `/usr/local/bin/python3:`,它可能导致了问题。试着去掉或调整这项。

   用如下命令移除 `PATH` 中的 `python3` 条目:
export PATH=$(echo $PATH | sed -e 's|:/usr/local/bin/python3||')

3. **检查软链接和文件权限**:
   确认 `/usr/local/bin/python3` 是否真的指向一个可执行文件,而非一个目录。

   使用下面的命令检查:
ls -l /usr/local/bin/python3

   如果链接有问题,尝试重新创建链接:
sudo ln -sf $(which python3) /usr/local/bin/python3

4. **尝试不使用虚拟环境**:
   有时候虚拟环境可能会导致问题。尝试在不使用虚拟环境的情况下打包。

5. **使用明确的文件路径**:
   确保 `spec` 文件中使用的文件路径是明确和正确的。

   检查一下 `spec` 文件 `/Users/yy/Documents/interface/testPy/dyhProject1/base/in/demo17.spec`,在命令中传递完整路径:
pyinstaller /Users/yy/Documents/interface/testPy/dyhProject1/base/in/demo17.spec

6. **在干净的环境中进行测试**:
   创建一个新的虚拟环境,然后重新安装所需的包,再次尝试打包。

python3 -m venv newenv
   source newenv/bin/activate
   pip install pyinstaller
   pyinstaller /path/to/your_script.py

这些步骤应该可以帮助你解决问题。如果问题依然存在,建议提供更多的环境信息或者尝试更详细的调试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2024-8-30 16:40:35 | 显示全部楼层
报错 `IsADirectoryError: Is a directory: '/usr/local/Python3'` 通常是因为 PyInstaller 尝试打开一个目录,而不是一个文件。以下是一些可能的解决方案:

1. **检查命令参数**:
   确保你在打包时,正确地指定了 Python 文件的路径,例如:
pyinstaller your_script.py

2. **环境检查**:
   确认你正在使用的 Python 可执行文件是正确的,可以通过以下命令确认:
which python

3. **PyInstaller 清理**:
   如果之前的打包过程生成了临时文件或目录,清理它们可能会帮助解决问题。你可以删除 `build` 和 `dist` 目录,然后再次尝试打包:
rm -rf build dist *.spec
   pyinstaller your_script.py

4. **Python 可执行文件检查**:
   如果你指定了 Python 可执行文件,请确保它是正确的文件,而不是一个目录。

希望这些步骤可以帮你解决问题。如果问题仍然存在,请附带更多的信息,以便进一步诊断。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-30 16:50:45 | 显示全部楼层
1.py文件路径和参数没错,pyinstaller -F /Users/yy/Documents/interface/testPy/dyhProject1/base/demo17.py
which python
python: aliased to /usr/local/bin/python3
2.rm -rf build/*执行后,重新打包依旧报错IsADirectoryError: [Errno 21] Is a directory: '/usr/local/Python3'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-30 16:50:54 | 显示全部楼层
天下第一小可爱 发表于 2024-08-30 16:50
1.py文件路径和参数没错,pyinstaller -F /Users/yy/D ...


好的,感谢你的详细信息。

由于你已经确认了文件路径和参数正确,执行了清理操作,报错依然存在,下一步我们可以检查以下几个问题:

1. **PyInstaller 环境**:
   确保你使用的是正确的 PyInstaller 版本,尝试重新安装 PyInstaller:
pip install --upgrade pyinstaller

2. **Python 环境**:
   确保你的 Python 环境没有问题,可以尝试创建一个虚拟环境,然后在新的虚拟环境中重新安装 PyInstaller 进行打包:
python3 -m venv myenv
   source myenv/bin/activate
   pip install pyinstaller
   pyinstaller -F /Users/yy/Documents/interface/testPy/dyhProject1/base/demo17.py

3. **检查特定的*.spec 文件**:
   如果以前曾经使用过 PyInstaller,确保不存在冲突的 `.spec` 文件。可以删除 `demo17.spec` 文件,然后重新打包生成新的 `.spec` 文件:
rm /Users/yy/Documents/interface/testPy/dyhProject1/base/demo17.spec
   pyinstaller -F /Users/yy/Documents/interface/testPy/dyhProject1/base/demo17.py

4. **权限和路径问题**:
   确保你的路径和权限没有问题,可以尝试将 `demo17.py` 复制到其它位置进行打包:
cp /Users/yy/Documents/interface/testPy/dyhProject1/base/demo17.py ~/demo17.py
   cd ~
   pyinstaller -F demo17.py

5. **调试模式运行**:
   运行 PyInstaller 的调试模式,获得更多详细信息:
pyinstaller -F /Users/yy/Documents/interface/testPy/dyhProject1/base/demo17.py --clean --log-level=DEBUG

希望这些步骤能帮你定位并解决问题。如果依然有问题,请随时告诉我详细的信息。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-30 17:30:09 | 显示全部楼层
FishC 发表于 2024-8-30 16:50
好的,感谢你的详细信息。

由于你已经确认了文件路径和参数正确,执行了清理操作,报错依然存在,下 ...

1.尝试过重新安装PyInstaller和回退到4.10版本的PyInstaller,当前使用的是5.13.2版本
2.虚拟环境依旧同样报错
34.rm -rf build
rm -rf dist
rm -rf demo17.spec
重新打包生成.spec 文件
5.调试模式输出没看到访问/usr/local/Python3,依旧同样报错
6./usr/local/Python3是软连接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-30 17:30:18 | 显示全部楼层
天下第一小可爱 发表于 2024-08-30 17:30
1.尝试过重新安装PyInstaller和回退到4.10版本的PyIns ...


看起来你已经尝试了多个解决方案。根据报错信息和你的描述,可能是因为一些路径配置问题。以下是几个可能的解决方案:

1. **检查 `PATH` 环境变量**:确保你的环境变量中没有包含类似 `/usr/local/Python3` 这样的目录,应该是具体的 Python 可执行文件路径。

2. **路径问题**:确保你的 `demo17.spec` 文件中没有硬编码的路径,避免路径指向目录而不是文件。

3. **使用绝对路径**:在执行 `pyinstaller` 命令时,确保使用的是绝对路径。例如:
pyinstaller /absolute/path/to/your_script.py

4. **检查软连接**:确认你的软连接 `/usr/local/Python3` 是否正确指向了 Python 安装目录,且该目录结构正确。你可以通过命令检查:
ls -l /usr/local/Python3

5. **手动修改 .spec 文件**:如果存在 `.spec` 文件,可以手动检查和修改 `demo17.spec` 文件,确定其中所有路径都是准确的。

6. **升级 Python 版本**:如果可能的话,尝试使用不同版本的 Python 重新创建虚拟环境并进行打包。

7. **清空缓存**:清理 PyInstaller 的缓存,防止缓存问题引起的错误。
rm -rf ~/.cache/pyinstaller

请根据上述提示逐步排查,看看是否能够解决问题。希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-30 17:51:43 | 显示全部楼层
FishC 发表于 2024-8-30 17:30
看起来你已经尝试了多个解决方案。根据报错信息和你的描述,可能是因为一些路径配置问题。以下是几个可 ...

1.之前排查过环境变量PATH没有问题
echo $PATH
/Users/yy/Downloads/myenv/bin:/usr/local/bin/python3:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/yy/Downloads/apache-ant-1.10.14/bin:/Users/yy/Downloads/apache-maven-3.8.5/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/Users/yy/Downloads/apache-jmeter-5.4.3/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:.
(myenv)
2.编码和路径都是正确的
3.之前相对路径和绝对路径都试过,同样报错
4.软连接指向正确
5.路径是对的
6.当前Python3.7.0版本,尝试升级版本前,在同事的电脑上同样的Python版本打包是正常的
7.清理缓存同样报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-30 17:51:53 | 显示全部楼层    本楼为最佳答案   
天下第一小可爱 发表于 2024-08-30 17:51
1.之前排查过环境变量PATH没有问题
echo $PATH
/Us ...


根据你描述的错误和排查情况,我有几个可能的解决方案:

1. **重装PyInstaller和依赖项**:
   尝试重新安装PyInstaller和所有相关依赖项,包括Python本身。

pip uninstall pyinstaller
   pip install pyinstaller

2. **调整路径中的'python3'项**:
   `PATH` 环境变量中有一项是 `/usr/local/bin/python3:`,它可能导致了问题。试着去掉或调整这项。

   用如下命令移除 `PATH` 中的 `python3` 条目:
export PATH=$(echo $PATH | sed -e 's|:/usr/local/bin/python3||')

3. **检查软链接和文件权限**:
   确认 `/usr/local/bin/python3` 是否真的指向一个可执行文件,而非一个目录。

   使用下面的命令检查:
ls -l /usr/local/bin/python3

   如果链接有问题,尝试重新创建链接:
sudo ln -sf $(which python3) /usr/local/bin/python3

4. **尝试不使用虚拟环境**:
   有时候虚拟环境可能会导致问题。尝试在不使用虚拟环境的情况下打包。

5. **使用明确的文件路径**:
   确保 `spec` 文件中使用的文件路径是明确和正确的。

   检查一下 `spec` 文件 `/Users/yy/Documents/interface/testPy/dyhProject1/base/in/demo17.spec`,在命令中传递完整路径:
pyinstaller /Users/yy/Documents/interface/testPy/dyhProject1/base/in/demo17.spec

6. **在干净的环境中进行测试**:
   创建一个新的虚拟环境,然后重新安装所需的包,再次尝试打包。

python3 -m venv newenv
   source newenv/bin/activate
   pip install pyinstaller
   pyinstaller /path/to/your_script.py

这些步骤应该可以帮助你解决问题。如果问题依然存在,建议提供更多的环境信息或者尝试更详细的调试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-4 02:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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