Pyinstaller打包django遇到No such file or directory: 'django/contrib/auth/password_validation.pyc'

本文分享了解决在打包Django项目时遇到的隐式依赖问题的方法,具体针对'Nosuchfileordirectory:'错误,通过复制并重命名特定的pyc文件到项目目录,成功解决了打包过程中出现的缺失文件问题。

需要打包一个django项目

在就是之前遇到的增加隐式依赖的问题,缺什么添加什么就好了
但是遇到这个,就很难受

No such file or directory: 'django/contrib/auth/password_validation.pyc'

在网上搜了一些解决办法
只搜到了将django版本设为2.0,应该是卸掉高版本的django重新

pip3 install django==2.0.0

但是本身装了很多django的依赖,我怕卸掉会影响其他的包,于是我尝试了一些办法最终解决了
一般python文件编译,生成pyc文件会在 pycache 文件夹中,我到对应目录的__pycache__
文件夹,将password_validation.cpython-**.pyc复制到上级目录也就是
~/django/contrib/auth/目录下,重命名为password_validation.pyc解决问题

参考文献

https://blog.youkuaiyun.com/qinshihuangabc/article/details/98619575#comments
https://blog.youkuaiyun.com/gubenpeiyuan/article/details/86551628

### FileNotFoundError: `[Errno 2] No such file or directory: '../Program Files'` 的解决方法 `FileNotFoundError` 是 Python 中常见的异常,通常表示程序尝试访问的文件或目录不存在。具体到错误信息 `FileNotFoundError: [Errno 2] No such file or directory: '../Program Files'`,可以从中推断出程序试图访问一个名为 `../Program Files` 的路径,但该路径并不存在或未被正确指定。 以下是解决此问题的详细方法: #### 1. 检查路径是否正确 确保程序中指定的路径 `../Program Files` 是有效的。如果使用的是相对路径,需要确认当前工作目录是否与预期一致。可以通过以下代码打印当前工作目录以进行检查: ```python import os print(os.getcwd()) ``` 如果当前工作目录与程序期望的路径不一致,可以考虑使用绝对路径代替相对路径。 #### 2. 使用绝对路径代替相对路径 如果相对路径 `../Program Files` 导致问题,可以将其替换为绝对路径。例如,如果 `Program Files` 文件夹位于系统的根目录下,可以将其路径替换为 `/Program Files`(Linux/macOS)或 `C:\\Program Files`(Windows)。 #### 3. 处理打包工具的资源路径问题 如果问题出现在使用 `PyInstaller` 或 `py2exe` 等工具打包的应用程序中,可能是由于打包工具未能正确包含或定位资源文件。可以尝试以下方法: - **动态获取资源路径**:在打包应用程序时,资源文件的路径可能会发生变化。可以通过以下方式动态获取资源路径: ```python import os import sys def resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ try: # PyInstaller creates a temp folder and stores path in _MEIPASS base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) ``` 使用 `resource_path` 函数来动态生成资源路径,例如 `resource_path('../Program Files')`。 - **确保资源文件被正确打包**:在使用 `PyInstaller` 时,可以通过 `.spec` 文件指定需要包含的资源文件。例如: ```python a = Analysis(['your_script.py'], pathex=['path/to/your/script'], binaries=[], datas=[('path/to/Program Files', 'Program Files')], ... ``` #### 4. 确保文件或目录存在 在程序运行之前,确保 `../Program Files` 路径下的文件或目录确实存在。可以使用以下代码检查路径是否存在: ```python import os if os.path.exists('../Program Files'): print("路径存在") else: print("路径不存在") ``` 如果路径不存在,可以手动创建该路径或调整程序逻辑以确保路径正确。 #### 5. 处理权限问题 在某些情况下,程序可能因为权限不足而无法访问特定目录(例如 `C:\Program Files`)。可以尝试以管理员权限运行程序,或者将文件移动到程序有权限访问的目录。 #### 6. 处理特殊字符和空格 路径中的特殊字符或空格可能导致问题。例如,`Program Files` 中的空格可能需要使用引号包裹路径。可以尝试以下方式处理: ```python path = '"../Program Files"' ``` ### 示例代码 以下是一个完整的示例,展示如何动态获取资源路径并检查路径是否存在: ```python import os import sys def resource_path(relative_path): """ Get absolute path to resource, works for dev and for PyInstaller """ try: # PyInstaller creates a temp folder and stores path in _MEIPASS base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) path = resource_path('../Program Files') if os.path.exists(path): print("路径存在") else: print("路径不存在") ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值