Модуль sys не имеет ошибки члена _MEIPASS на Python 3.6.6 - PullRequest
0 голосов
/ 05 июля 2018

Я пытался связать файл json в исполняемый файл python, созданный с помощью pyinstaller. После долгих исследований найденное решение заключалось в использовании папки _MEIPASS; однако VSCode утверждает, что пакет sys не имеет члена _MEIPASS.

Соответствующая часть моего кода выглядит так:

branches_path = 'bank_branches/bank_branches.json'

if hasattr(sys, "_MEIPASS"):
     branches_path = os.path.join(sys._MEIPASS, branches_path)

Код работает как в терминальной версии, так и в автономном приложении, поэтому об этом позаботятся; Тем не менее, я хотел бы знать, есть ли решение, которое работает и не имеет связанных ошибок. Если это поможет, я использую Python 3.6.6

1 Ответ

0 голосов
/ 23 августа 2018

Я столкнулся с подобной проблемой при создании исполняемого файла с помощью pyinstaller. Мне пришлось внести два изменения в мой скрипт, чтобы получить функциональный исполняемый файл.

Сначала я создал эту функцию:

def resource_path(relative_path):
    try: 
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

В моем скрипте несколько классов, поэтому я поставил его в самом конце, чтобы все классы могли ссылаться на него. Затем я заменил любую функцию, которая у меня была

os.getcwd()

- что, вероятно, было плохой идеей - с

resource_path() 

и для переменной внутри resource_path () я использовал эту функцию вместо:

os.path.dirname(os.path.abspath(__file__))

Эта функция все равно вернула то, что я хотел; местоположение ЭТОГО файла / программы, которая работает.

Итак, что было написано ранее:

filePath = os.getcwd() + "\\my_file.csv"

Теперь читается как:

filePath = resource_path(os.path.dirname(os.path.abspath(__file__))) + "\\my_file.csv"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...