1

我正在尝试使用 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\mainsrc\test具有通常的结构,除了每个都包含一个新fixtures文件夹(很像resourcesJava)。如果您想知道,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.pycode.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文件夹​​没有被复制过来。经过一些研究(见这个问题),我设法通过以下方式修改:

  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

4

1 回答 1

1

我最终发现了原始文档的这一部分,建议使用以下适合我的解决方案:

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"))。

于 2020-01-22T11:53:38.350 回答