【问题标题】:Relative file path within a compiled EXE已编译的 EXE 中的相对文件路径
【发布时间】:2020-07-20 13:03:04
【问题描述】:

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

这是我正在尝试做的事情。我有一个编译的 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 的文档看了很长时间,看看我是否只是愚蠢而忘记添加一些东西,或者它是否说明了是否必须使用绝对路径,但我没有什么都看。

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

【问题讨论】:

  • 您确定在路径中使用了正确的斜杠吗?您在 copytree 中的第一个参数使用正斜杠,而第二个参数使用反斜杠。当你把所有的斜线都变成正斜线或者全部变成反斜线时会发生什么?

标签: python copy executable relative-path shutil


【解决方案1】:

这能解决您的问题吗?

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多