pyinstaller останавливает python от чтения из каталога скрипта - PullRequest
0 голосов
/ 06 мая 2020

У меня есть этот блок кода, который работает в форме сценария python, но когда я упаковываю сценарий в exe с помощью pyinstaller, это всегда приводит к тому, что программа сообщает, что файл конфигурации не может быть найден. Я положил config.ini в ту же папку, что и exe-файл.

config = configparser.ConfigParser()
configComplete = True
configExists = False
try:
    open(os.path.join(sys.path[0],'config.ini'))
    config.read(os.path.join(sys.path[0],'config.ini'))
    destination = config['server']['ServerAddress']
    key = config['server']['ApiKey']
    configExists = True
except KeyError:
    configComplete = False
except FileNotFoundError:
    try:
        open(expanduser('~/.config/octoprint-cli.ini'))
        config.read(expanduser('~/.config/octoprint-cli.ini'))
        destination = config['server']['ServerAddress']
        key = config['server']['ApiKey']
        configExists = True
    except KeyError:
        configComplete = False
    except FileNotFoundError:
        pass

1 Ответ

0 голосов
/ 06 мая 2020

У меня сейчас нет python, установленного для проверки этого на моем компьютере, но обычно, когда я ищу файл, относящийся к местоположению файла python, предпочтительнее использовать:

import os

CONFIG_FILE_PATH = f"{os.path.dirname(__file__)}{os.sep}config.ini"


if os.path.exists(CONFIG_FILE_PATH): # If the file already exists
    config.read(CONFIG_FILE_PATH) # Read it

else: # If a config file does not exist
    # Either throw error or create fresh config

Этот код представляет собой способ c поиска файла в той же директории, что и файл python, и перехват не обязательно приведет к ошибке, если вы этого не хотите.

См. если это работает с pyinstaller, как я полагаю, когда я последний раз использовал его, это сработало.

...