首页 > 解决方案 > 已编译的 EXE 中的相对文件路径

问题描述

我一直在到处寻找这个答案,但没有运气。

这是我正在尝试做的事情。我有一个编译的 python 可执行文件,它有几个目录。在这些目录中,我有我想要从 .exe 复制到桌面的函数和文件。以下是本文的可执行文件的文件结构:

EXECUTABLE.exe
|
+--configurations/
|    |
|    +--Win_Mozilla/
|        |
|        +--Extensions/ # Directory I want to copy
|        +--Firefox/ # Directory I want to copy
|        +--SystemExtensionDev/ # Directory I want to copy
|
+--functions/
     |
     +--runfunction.py

我需要做的是让 runfunction.py 将文件从配置/Win_Mozilla/ 复制到 %appdata% 中的不同文件夹中。为了实现这一点,我在 runfunction.py 中有以下内容:

import shutil

print('Configuring browser...')
try:
    shutil.rmtree(r'%appdata%\Mozilla\Extensions')
    shutil.rmtree(r'%appdata%\Mozilla\Firefox')
    shutil.rmtree(r'%appdata%\Mozilla\SystemExtensionsDev')
except Exception as e:
    print('Error caught: ' + str(e))
shutil.copytree('../configurations/Win_Mozilla/Extensions', # Error occurs here
                r'%appdata%\Mozilla\Extensions')
shutil.copytree('../configurations/Win_Mozilla/Firefox',
                r'%appdata%\Mozilla\Firefox')
shutil.copytree('../configurations/Win_Mozilla/SystemExtensionsDev',
                r'%appdata%\Mozilla\SystemExtensionsDev')
print('Firefox has been configured')

运行此程序时,我收到一条错误消息,说file path '../configurations/Win_Mozilla/Extensions' cannot be found让我相信shutil 的相对路径有问题。由于它是已编译的程序,我无法将路径硬编码。

为了清楚起见,我正在尝试将已编译的可执行文件中的文件夹复制到桌面或其他位置

正确的?

有人可以帮我解决这个问题吗?我做错了什么,语法错误,或者这只是我想要做的不可能吗?将程序与配置文件分开发布会更好吗?

另外,我很长一段时间都在盯着shutil的文档看我是否只是愚蠢而忘记添加一些东西,或者它是否说明了是否必须使用绝对路径,但我什么也没看到。

非常感谢您对此问题的任何帮助。

标签: pythoncopyexecutablerelative-pathshutil

解决方案


这会解决您的问题吗?

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # To Get A Relative File Path On Any OS(Windows, Mac, Linux)
print(BASE_DIR)

推荐阅读