Я экспериментирую с 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 дер не копируется После некоторого исследования ( см. Этот вопрос ) мне удалось исправить это следующим образом:
Перемещение папки fixtures
в python
Добавление 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
довольно большой.