如何在使用 Pycharm + Docker 测试项目时在 Python 库包上进行开发?

How can I develop on a Python library package while testing it a project using Pycharm + Docker?

这是一个非常具体的问题,所以我乐于接受有用的建议,这些建议可以帮助您解决问题。

我有一个 python 项目,它在 docker 容器中运行,配置为与 Pycharm 调试器一起工作。我有一个包,用 pip 安装在一个虚拟环境中,用于这个项目,我想开发它。

我还没有找到一种方法将包 link 放入我项目的 docker 容器中,这样我就可以更改包并在我的项目中更新代码。 目前,调试器在进入包的代码路径上工作,只要我不更改包中的任何代码。

这两个问题加在一起,很难在不反复安装的情况下测试对包的更改。

有没有更好的方法来实现这个目标?

以可编辑模式安装包。

pip install -e .

这将允许您更改代码并同时更新程序包。

您可以尝试结合使用@pbskumar 提出的建议和 docker volumes

首先 运行 带有选项 --volume /path/to/your/package/on/host/:/path/in/your/container

的容器

然后在容器内执行: pip install -e /path/in/your/container

应该可以。

给定应该协同工作的两个源代码树:

  1. 为他们创建一个虚拟环境,python -m venv vpy
  2. 激活它,设置相关的shell环境变量,. vpy/bin/activate
  3. 安装库,cd library && pip install -e .-e 使 pip 记住指向实时源代码树的指针。)
  4. 安装应用程序,cd app && pip install -e .。 (Pip 应该知道你已经安装了库。)
  5. 做你需要做的,$EDITOR file.py; pytest; the_app; $SCM commit
  6. 一旦一切正常,docker build && docker run

我会把与 Docker 的任何互动留到最后,一旦您确信自己已经修复了库错误或构建了功能。这避免了你的编辑器和容器在路径上不一致的麻烦,这意味着你不需要 root 权限来进行任何普通的开发工作。

我想我已经用这个系统涵盖了上面概述的所有基础:

我的项目结构是:

projects
   projectA (my docker project)
   projectB (the library used in my docker project that I want to develop on)
  1. 在项目A中:项目设置->项目解释器->添加路径映射->将本地库路径映射到容器上的远程安装路径

    例如。 本地路径: /user/{用户名}/projects/projectB 远程路径: /usr/local/lib/python3.6/site-packages/projectB

  2. 在项目A中:项目设置->项目结构->添加内容根目录(项目B)->选择标记为sources

  3. 在 projectA 中:将容器中 projectB 的路径标记为 dockerfile

    中的卷

    例如。音量 /usr/local/lib/python3.6/site-packages/projectB

  4. 在项目A中:将本地库作为卷加载到docker-compose.yml

    中容器上的库安装

    例如。

数量:

- ../projectB:/usr/local/lib/python3.6/site-packages/projectB

使用 python 3.6 和 Pycharm 2018.2