You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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,系统会默认隐藏该文件夹。
  • 加密文件内容:对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:45:39