如何实现Python代码专属访问指定文件夹及子文件夹,禁止用户手动查看
实现Python代码可访问文件夹但禁止用户通过资源管理器查看的方案
方法1:把资源打包成单可执行文件
用PyInstaller把整个项目(包括所有子文件夹里的资源)打包成一个可执行文件,用户只能看到这个exe,看不到原始文件夹结构。
- 先写
mygui.spec配置文件,指定要打包的资源路径:a = Analysis( ['你的主脚本.py'], pathex=['./mygui'], datas=[ ('./mygui/image', 'image'), ('./mygui/icon', 'icon'), ('./mygui/password', 'password'), ('./mygui/log', 'log'), ('./mygui/soundeffects', 'soundeffects'), ('./mygui/code', 'code'), ], ) pyz = PYZ(a.pure, a.zipped_data) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='mygui', debug=False, console=False) # GUI程序设为False去掉控制台窗口 - 执行打包命令:
pyinstaller mygui.spec - 代码里通过
sys._MEIPASS访问打包后的资源:import sys import os def get_resource(relative_path): try: # 打包后临时资源目录的路径 base_path = sys._MEIPASS except Exception: # 开发阶段用当前目录 base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) # 示例:访问image文件夹下的图片 img_path = get_resource('image/background.png')
方法2:修改文件夹权限,仅允许Python运行用户访问
- Windows:用命令行设置权限,拒绝所有普通用户读取,仅授予当前用户完全控制权限:
icacls "mygui" /deny Everyone:(OI)(CI)R icacls "mygui" /grant "%USERNAME%":(OI)(CI)F - Linux/macOS:把文件夹权限改为仅所有者可读写执行:
chmod -R 700 mygui/
注意:要保证运行Python的用户就是设置权限的用户,否则代码也无法访问资源。
方法3:隐藏文件夹+加密敏感文件
- 隐藏文件夹:
- Windows:给文件夹添加系统隐藏属性,资源管理器默认无法看到:
attrib +s +h mygui - Linux/macOS:将文件夹名改为
.mygui,系统会默认隐藏该文件夹。
- Windows:给文件夹添加系统隐藏属性,资源管理器默认无法看到:
- 加密文件内容:对
password、log等敏感文件夹内的文件加密,代码读取时再解密,示例用cryptography库:from cryptography.fernet import Fernet # 生成密钥(仅需一次,妥善保存) key = Fernet.generate_key() with open("secret.key", "wb") as f: f.write(key) # 加密文件 def encrypt_file(file_path): with open("secret.key", "rb") as f: key = f.read() fernet = Fernet(key) with open(file_path, "rb") as f: data = f.read() encrypted_data = fernet.encrypt(data) with open(file_path, "wb") as f: f.write(encrypted_data) # 解密文件(直接返回解密后的数据,无需写回文件) def decrypt_file(file_path): with open("secret.key", "rb") as f: key = f.read() fernet = Fernet(key) with open(file_path, "rb") as f: encrypted_data = f.read() return fernet.decrypt(encrypted_data)
就算用户找到隐藏文件夹,打开文件也是乱码,只有你的代码能解密读取内容。
内容的提问来源于stack exchange,提问作者YASHAS R NAIR
相关产品推荐
相关产品推荐

