如何在使用 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
应该可以。
给定应该协同工作的两个源代码树:
- 为他们创建一个虚拟环境,
python -m venv vpy
。
- 激活它,设置相关的shell环境变量,
. vpy/bin/activate
。
- 安装库,
cd library && pip install -e .
(-e
使 pip 记住指向实时源代码树的指针。)
- 安装应用程序,
cd app && pip install -e .
。 (Pip 应该知道你已经安装了库。)
- 做你需要做的,
$EDITOR file.py; pytest; the_app; $SCM commit
。
- 一旦一切正常,
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)
在项目A中:项目设置->项目解释器->添加路径映射->将本地库路径映射到容器上的远程安装路径
例如。 本地路径: /user/{用户名}/projects/projectB 远程路径: /usr/local/lib/python3.6/site-packages/projectB
在项目A中:项目设置->项目结构->添加内容根目录(项目B)->选择标记为sources
在 projectA 中:将容器中 projectB 的路径标记为 dockerfile
中的卷
例如。音量 /usr/local/lib/python3.6/site-packages/projectB
在项目A中:将本地库作为卷加载到docker-compose.yml
中容器上的库安装
例如。
数量:
- ../projectB:/usr/local/lib/python3.6/site-packages/projectB
使用 python 3.6 和 Pycharm 2018.2
这是一个非常具体的问题,所以我乐于接受有用的建议,这些建议可以帮助您解决问题。
我有一个 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
应该可以。
给定应该协同工作的两个源代码树:
- 为他们创建一个虚拟环境,
python -m venv vpy
。 - 激活它,设置相关的shell环境变量,
. vpy/bin/activate
。 - 安装库,
cd library && pip install -e .
(-e
使 pip 记住指向实时源代码树的指针。) - 安装应用程序,
cd app && pip install -e .
。 (Pip 应该知道你已经安装了库。) - 做你需要做的,
$EDITOR file.py; pytest; the_app; $SCM commit
。 - 一旦一切正常,
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)
在项目A中:项目设置->项目解释器->添加路径映射->将本地库路径映射到容器上的远程安装路径
例如。 本地路径: /user/{用户名}/projects/projectB 远程路径: /usr/local/lib/python3.6/site-packages/projectB
在项目A中:项目设置->项目结构->添加内容根目录(项目B)->选择标记为sources
在 projectA 中:将容器中 projectB 的路径标记为 dockerfile
中的卷例如。音量 /usr/local/lib/python3.6/site-packages/projectB
在项目A中:将本地库作为卷加载到docker-compose.yml
中容器上的库安装例如。
数量:
- ../projectB:/usr/local/lib/python3.6/site-packages/projectB
使用 python 3.6 和 Pycharm 2018.2