最近开发的 python 应用最终需要打包成一个可执行文件,以便于在其它设备上运行。
打包时就涉及到很多文件的路径处理问题,因为通常开发时,资源通常都是在存在项目目录下的,但是如果是执行文件,特别是单执行文件,它是会被解压到一个临时目录的,这个时候获取文件时路径是不同的。
那么就需要了解下应用执行程序运行时的相关目录知识了。
单执行文件的自解压机制
在 Windows 和 macOS 上,单执行文件(standalone executable)通常是自解压的,也就是说它们在运行时会解压自身到特定的临时目录中执行。下面是两个操作系统的具体情况:
-
Windows:
- 通常,单执行文件会解压到
C:\Users\<Username>\AppData\Local\Temp\
目录下的某个临时文件夹中。这个临时文件夹通常会有随机生成的名字,以保证每次执行的隔离性。
- 通常,单执行文件会解压到
-
macOS:
- 在 macOS 上,单执行文件通常会解压到
/var/folders/
下的一个临时目录中。和 Windows 类似,这个目录也是随机生成的,以确保不同的执行实例不会互相干扰。
- 在 macOS 上,单执行文件通常会解压到
这种自解压执行文件的机制主要是为了方便用户直接运行程序,而无需手动解压。
此外,程序运行完毕后,这些临时文件通常会被自动清理,以避免占用过多的磁盘空间。
持久化存储推荐的数据目录
对于应用创建的数据库文件的持久化存储,选择合适的目录非常重要,以确保用户数据的安全、访问权限的合理性,以及跨会话的数据一致性。
以下是一些推荐的存储路径,这些路径符合大多数操作系统的应用数据管理习惯:
Windows
-
应用数据目录 (
%APPDATA%
):这是最常用的存储用户数据的位置。例如,你可以将数据库文件存放在
%APPDATA%\YourAppName\
目录下。这个目录对应的完整路径通常是C:\Users\<Username>\AppData\Roaming\YourAppName\
。 -
程序数据目录 (
%PROGRAMDATA%
):用于存放所有用户都可以访问的应用数据。例如,
C:\ProgramData\YourAppName\
。使用这个目录需要考虑多用户访问和权限管理。
macOS
- 应用支持目录 (
~/Library/Application Support/
):适用于存储应用程序特定的数据文件,例如数据库。路径例如:~/Library/Application Support/YourAppName/
。 - 文档目录 (
~/Documents/
):如果用户需要能够直接访问到这些文件,可以选择存放在用户的文档文件夹下。
Linux
- 配置目录 (
~/.config/YourAppName/
):通常用于存储配置文件和小型数据库。 - 数据目录 (
~/.local/share/YourAppName/
):适合存储应用生成的数据文件。
获取特定目录的实现方法
在你的应用程序中,你可以使用以下代码片段来获取这些特定的目录并创建数据库文件:
Python 示例(适用于 Windows 和 macOS)
import os
import platform
from pathlib import Path
def get_app_data_path(app_name):
if platform.system() == "Windows":
app_data_path = Path(os.getenv('APPDATA')) / app_name
elif platform.system() == "Darwin": # macOS
app_data_path = Path.home() / 'Library' / 'Application Support' / app_name
else: # 默认为Linux路径
app_data_path = Path.home() / '.local' / 'share' / app_name
app_data_path.mkdir(parents=True, exist_ok=True)
return app_data_path
平台通用的应用文件夹命名
如果你希望在各个平台上建立一个应用文件夹,选择一个符合通用命名规范的名称非常重要,以确保一致性和易于识别。以下是一些推荐的命名方法:
- 简单名称:使用你的应用名称,如
shejibiji
。确保这个名称简洁明了且容易记住。 - 组织名称前缀:如果你的应用可能与其他组织或应用冲突,可以使用你的组织或公司名作为前缀,如
ethan_shejibiji
。 - 反向域名:保持使用反向域名结构,如
com.shejibiji
,尤其适用于需要全局唯一标识的环境。
示例
假设你的应用名为 shejibiji
,你可以根据平台选择以下文件夹名:
- Windows:
%APPDATA%\com.shejibiji\
- macOS:
~/Library/Application Support/com.shejibiji/
- Linux:
~/.config/duipin/
或~/.local/share/com.shejibiji/
这种命名方式有助于确保在用户的电脑上清晰地识别你的应用相关的数据和配置文件,同时也符合大多数操作系统的文件系统管理习惯。
结语
通过上面的这些知识了解,之后开发的应用就可以很方便的知道文件应该存放到哪里了。
而且对于别的运行应用,也可以知道它们的运行文件都在哪个目录,方便了解学习:)
我说的了解学习,你懂吧~