python - 如何将 Kedro 与 Pipenv 一起使用?
问题描述
我目前正在kedro, version 0.15.4
使用pipenv, version 2018.11.26
.
目前,如果我想使用,我必须执行以下操作Pipenv
(对于这个例子,我希望这个项目驻留在kedro-pipenv
目录中):
mkdir kedro-pipenv && cd kedro-pipenv
- 这是必需的,以便
virtualenv
创建的项目“绑定”到项目目录,这仅意味着它的名称基于执行pipenv install kedro
orpipenv shell
命令的目录名称。 - 不幸的是,目前
Pipenv
没有支持自定义virtualenv
名称的功能。
- 这是必需的,以便
pipenv install kedro
- 在我的示例中,这会生成一个
virtualenv
名称,该名称kedro-pipenv-AB9IGRnB
位于以下位置~/.local/share/virtualenvs/kedro-pipenv-AB9IGRnB/
- 在我的示例中,这会生成一个
pipenv shell
kedro info
- 一切看起来都很好,
kedro
已成功安装在由virualenv
处理Pipenv
- 一切看起来都很好,
cd .. & kedro new
- 我向上导航一个目录并提供
kedro-pipenv
项目的目录名称。鉴于该目录之前已在步骤 1 中创建,这将失败,这是预期的,我收到以下消息:
- 我向上导航一个目录并提供
cookiecutter.exceptions.OutputDirExistsException:
Error: "/Users/xyz/projects/kedro-pipenv" directory already exists
Run with --verbose to see the full exception
Error: Failed to generate project.
为了“解决”这个问题,我在与virtualenv
以前相同的同时执行以下操作:
mv kedro-pipenv kedro-pipenv_tmp
- 重命名现有目录
kedro new
- 我提供
kedro-pipenv
项目的目录名称。
- 我提供
mv kedro-pipenv_tmp/Pipfile* kedro-pipenv && rm -rf kedro-pipenv_tmp
- 需要此步骤以便
kedro
维护 Python 版本和单个依赖项。
- 需要此步骤以便
cd kedro-pipenv
kedro install
- 用于
kedro build-reqs
管理项目需求。
我也很熟悉,conda
这似乎是目前 Kedro 处理环境的一种更清洁的方式。
但是,对于我的大多数其他项目,我一直在使用pyenv
环境Pipenv
和依赖项管理。这允许我通过Pipfile
在我的每个项目的根目录中都有一个与特定项目空间相关的环境信息。
有没有人对如何改进上述工作流程有任何建议?
解决方案
如果您需要 Pipenv 环境根目录指向 Kedro 项目根目录,那么您的解决方案可能是目前情况下的最佳解决方案。如果您可以使用不同名称的 Pipenv 环境根目录和 Kedro 项目目录,那么您可以执行以下操作:
mkdir kedro-pipenv && cd kedro-pipenv
pipenv install kedro
pipenv run kedro new # create Kedro project inside 'kedro-pipenv'
cd <project-dir>
pipenv run kedro run # still works even in nested directory
正如您已经指出的那样,使用 确实更容易conda
,因为它的环境不依赖于任何特定目录,不像pipenv
.
希望这会有所帮助!
推荐阅读
- docker - Dockerized nginx 无法解析 DNS 名称
- python - SQL pyodbc 问题
- python - 这是引用调用、错误还是其他什么的示例?
- python - 在Python程序中模拟CTRL+Z发送短信
- notepad++ - 返回字符串匹配后的数字小于特定数字的行
- google-chrome-extension - 管理本地 cookie
- rascal - 如何使用 Rascal 从/向 json 文件读取/写入位置
- python - 如何遍历数据框并删除行?
- javascript - 正则表达式匹配来自 HTML 脚本的谷歌地图坐标
- backbone.js - 使用 Backbone.js 从 Parse Server 获取数据的问题