Сборка пакета python: как вызывать не кодовые файлы в основном скрипте пакета - PullRequest
0 голосов
/ 17 января 2020

У меня есть проект, который мне удается упаковывать, распространять, устанавливать и импортировать. Моя папка пакета выглядит примерно так:

/
pkg/
   __init__.py
   main.py
   data/
       data_1
       data_2.sav
       data_3.bin

Проблема в том, что main.py зависит от файлов без кода в каталоге data, и когда я вызываю main.py, я получаю следующую ошибку:

FileNotFoundError: [Errno 2] No such file or directory: 'data/data_1'

Дополнительно:

  • все файлы данных упакованы правильно
  • в main.py, файлы данных называются:

    data = pickle.load(open('data/data_1', "rb"))

Основной сценарий по какой-то причине не находит файлы данных. Что может быть не так? Есть предложения?

Спасибо !!

Ответы [ 2 ]

1 голос
/ 17 января 2020

Я думаю, проблема в том, что путь интерпретируется относительно того места, где вы выполняете main.py. Может быть, это работает:

import os

this_path = os.path.dirname(__file__)
data =  pickle.load(open(
     os.path.join(this_path, 'data/data_1'),
    "rb"
))
0 голосов
/ 17 января 2020

С python 3.4+ вы можете использовать модуль Pathlib , как показано ниже:

from pathlib import Path
path = (Path(__file__).parent / "../data/data_1").resolve()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...