Как включить наборы данных в пакеты, сгенерированные PyBuilder, и сделать их доступными - PullRequest
0 голосов
/ 21 января 2020

Я экспериментирую с PyBuilder, потому что я ищу более организованный и ориентированный на производство способ разработки проектов по науке о данных.

До сих пор я создал проект PyBuilder со следующей структурой (папка заглавными буквами для удобства чтения):

PROJECT
 |   build.py
 |   setup.py
 +-- .ENV
 |   +-- ...
 +-- SRC
 |   +-- MAIN
 |   |   +-- FIXTURES
 |   |   |   +-- data.csv
 |   |   +-- PYTHON
 |   |   |   +-- code.py
 |   |   +-- SCRIPTS
 |   |       +-- run.py
 |   +---TEST
 |       +-- FIXTURES
 |       |   +-- values.csv
 |       +-- PYTHON
 |           +-- test_code.py
...

build.py и setup.py - это файлы, созданные PyBuilder. .env содержит виртуальную среду (то есть: Python 3.7). src\main и src\test имеют обычную структуру, за исключением того, что каждая содержит новую папку fixtures (очень похоже на resources в Java). Если вам интересно, src\test выглядит так, как указано, потому что:

project.set_property("dir_source_unittest_python", "src/test/python")
project.set_property("unittest_module_glob", "test_*")

Мое намерение таково:

  • run.py содержит скрипт, который вызывает код в code.py для прогнозирования погоды на завтра, например,
  • code.py содержит код для загрузки набора данных в data.csv и построение модели, которая предоставляет прогнозы погоды на данный день.
  • data.py содержит исторические данные, необходимые в code.py для обучения модели прогнозирования погоды
  • test_code.py, содержат модульные тесты, чтобы убедиться, что функции модели и утилиты в code.py работают должным образом
  • values.py содержит входные значения и ожидаемые результаты, которые будут использоваться в test_code.py для проверки code.py.

Мой код в code.py обращается к data.csv, определяя папку FIXTURES следующим образом :

FIXTURES = os.path.join(os.path.dirname(__file__), '..', 'fixtures')
...
with open(os.path.join(FIXTURES, 'data.csv'), 'r') as file:
    ...

И я могу успешно запустить скрипт run.py в моей среде IDE для генерации прогнозов.

Когда я пытаюсь сгенерировать пакет, чтобы поделиться предсказателем с моими коллегами, я видите, что src\main\fixtures fol дер не копируется После некоторого исследования ( см. Этот вопрос ) мне удалось исправить это следующим образом:

  1. Перемещение папки fixtures в python

  2. Добавление project.include_file("lib/python3.7/site-packages/fixtures", "fixtures/*.csv") к build.py.

К сожалению, я хотел бы сохранить fixtures там, где оно было изначально. В любом случае я заметил, что run.py не выполняется, даже если установка успешно завершена (pyb install). Причина в том, что data.csv не может быть успешно расположен:

... 
FileNotFoundError: [Errno 2] File b'/Users/stefano/Workspace/project/.env/lib/python3.7/site-packages/../fixtures/data.csv' does not exist: b'/Users/stefano/Workspace/project/.env/lib/python3.7/site-packages/../fixtures/data.csv'

Кто-нибудь знает, как сохранить папку fixtures в src\main (а не в src\main\python)?

Также кто-нибудь знает, как сделать файлы типа data.csv обнаруживаемыми после установки пакета?

Заранее спасибо за любую помощь!

Примечание: Обратите внимание, что решение, использующее эту структуру, может быть не самым удобным, если data.csv довольно большой.

1 Ответ

0 голосов
/ 22 января 2020

В конце концов я обнаружил эту часть оригинальной документации, предлагающую следующее решение, которое прекрасно работает со мной:

use_plugin("copy_resources")
...
@init
def set_properties(project):
    project.get_property("copy_resources_glob").append("src/main/fixtures/*.csv")
    project.set_property("copy_resources_target", "$dir_dist")
    project.install_file("lib/python3.7/fixtures", "src/main/fixtures/data.csv")

Примечание: В Последняя команда по какой-то причине не позволяет использовать подстановочный знак (project.install_file("lib/python3.7/fixtures", "src/main/fixtures/*.csv")).

...