我当前在kedro, version 0.15.4中使用pipenv, version 2018.11.26

目前,如果要使用Pipenv,则必须执行以下操作(对于此示例,我希望此项目驻留在kedro-pipenv目录中):


mkdir kedro-pipenv && cd kedro-pipenv


这是必需的,以便将创建的virtualenv“绑定”到项目目录,这实际上仅意味着它的名称基于执行pipenv install kedropipenv shell命令的目录名称。
不幸的是,目前Pipenv没有支持自定义virtualenv名称的功能。

pipenv install kedro


在我的示例中,这将生成一个名称为virtualenvkedro-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


需要执行此步骤,以便维护Python版本和单个kedro依赖项。

cd kedro-pipenv
kedro install
使用kedro build-reqs来管理项目需求。


我对conda也很熟悉,目前看来,这是处理Kedro环境的一种更简洁的方法。

但是,对于我的其他大多数项目,我一直将pyenvPipenv一起用于环境和依赖项管理。这样,通过在每个项目的根目录中都有一个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不同,它的环境不绑定到任何特定目录。

希望这会有所帮助!

10-06 09:05