Python 3.x 如何在PyBuilder生成的包中包含数据集并使其可用

Python 3.x 如何在PyBuilder生成的包中包含数据集并使其可用,python-3.x,pybuilder,Python 3.x,Pybuilder,我正在试用PyBuilder,因为我正在寻找一种更有组织性、更面向生产的方法来开发数据科学项目 到目前为止,我已经创建了一个PyBuilder项目,其结构如下(文件夹为可读性而大写): build.py和setup.py是PyBuilder生成的文件。 .env包含虚拟环境(即:Python 3.7)。 src\main和src\test具有通常的结构,不同的是它们都包含一个新的fixtures文件夹(很像Java中的resources)。如果您想知道,src\test看起来像是这样,因为: p

我正在试用PyBuilder,因为我正在寻找一种更有组织性、更面向生产的方法来开发数据科学项目

到目前为止,我已经创建了一个PyBuilder项目,其结构如下(文件夹为可读性而大写):

build.py
setup.py
是PyBuilder生成的文件。
.env
包含虚拟环境(即:Python 3.7)。
src\main
src\test
具有通常的结构,不同的是它们都包含一个新的
fixtures
文件夹(很像Java中的
resources
)。如果您想知道,
src\test
看起来像是这样,因为:

project.set_property("dir_source_unittest_python", "src/test/python")
project.set_property("unittest_module_glob", "test_*")
我的意图如下:

FIXTURES = os.path.join(os.path.dirname(__file__), '..', 'fixtures')
...
with open(os.path.join(FIXTURES, 'data.csv'), 'r') as file:
    ...
  • run.py
    包含一个脚本,该脚本调用
    code.py
    中的代码来预测明天的天气
  • code.py
    包含在
    data.csv
    中加载数据集的代码,并构建提供给定日期天气预测的模型
  • data.py
    包含训练天气预报模型所需的
    code.py
    中的历史数据
  • test\u code.py
    包含单元测试,以确保
    code.py
    中的模型和实用程序功能按预期工作
  • values.py
    包含用于测试
    code.py
    的输入值和预期结果
code.py
中的“我的代码”通过定义FIXTURES文件夹访问
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_文件(“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
    相当大,使用此结构的解决方案可能不是最方便的解决方案。

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

    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_文件(“lib/python3.7/fixtures”、“src/main/fixtures/*.csv”)

    您在哪里可以找到这个问题?我也在同一条船上@Stefano BragagliaHi Gopinath,见下面我的答案。它对我有用。。。