我正在尝试使用 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
。
我的代码通过定义FIXTURES文件夹进行code.py
访问data.csv
,如下所示:
FIXTURES = os.path.join(os.path.dirname(__file__), '..', 'fixtures')
...
with open(os.path.join(FIXTURES, 'data.csv'), 'r') as file:
...
而且我可以在我的 IDE 中成功运行脚本run.py
来生成预测。
当我尝试生成一个包以与我的同事共享预测器时,我看到该src\main\fixtures
文件夹没有被复制过来。经过一些研究(见这个问题),我设法通过以下方式修改:
将
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