背景
本文介绍了PyCon JP 2017开发Sprint和
这是后续研究会议(Nagoya.Swift September研究会议--connpass)所做工作的摘要。
笔记
以下内容截至2017年,现在有一种更好的方法。从以下观点出发,不建议根据以下内容构建环境。
尽管需要
例如,您可以按照以下说明将Docker容器用作开发环境。
https://code.visualstudio.com/docs/remote/containers
以下内容仅供参考,以了解2017年时的环境,但应注意,仍不建议您遵循此步骤。
目标
我通常只使用Jupyter,而不使用其他开发环境,因此我将尝试将VS Code与Python配合使用。
我会尽力实现下一个目标。
在
在本地环境中运行
环境
环境如下。
- 操作系统:macOS
- python:python3.6
- 使用的工具:Anaconda,pyenv,pyenv-virtualenv
python
的环境构造
为
创建专用目录,并为Anaconda构建环境。
我认为我喜欢用它来构建环境,但是我使用了
1 2 3 4 | mkdir ~/Documents/VSCodeHandsOn cd ~/Documents/VSCodeHandsOn pyenv install anaconda3-2.5.0 pyenv local anaconda3-2.5.0 |
参考
-
pyenv-使用virtualenv --Qiita为每个目录构建python环境
-
Python虚拟环境构建2017.01版--YAMAGUCHI :: Weblog
-
Python虚拟环境构建(2017版)pyenv和pyenv-virtualenv和virtualenv和virtualenvwrapper和pyvenv和venv --Qiita
-
pyenv / pyenv:简单的Python版本管理
VS Code环境构建
安装VS Code后,如果继续使用Visual Studio Code引用Python,则似乎可以。
我使用Python --Visual Studio Marketplace。
VS代码设置
让我们为该示例编写以下代码。
1 2 3 4 5 6 7 | import sys import numpy as np # Numpyはanacondaを使ったら使いたくなると思うので print('hello python!') print('python version:' + str(sys.version_info)) print('numpy version:' + np.version.full_version) |
当我按原样运行Python代码时,在我的环境中,发生了诸如"找不到numpy,Python版本与我期望的版本不同"之类的问题。
通过在
settings.json
1 2 3 | { "python.pythonPath": "/Users/[USERNAME]/.pyenv/shims/python" } |
参考
-
uroshika的注释:在VisualStudioCode中运行Python时如果无法导入模块怎么办
-
[Visual Studio代码] v1.12.1 Settings.json文件用于设置--Qiita
-
Python路径和版本·DonJayamanne / pythonVSCode Wiki
-
我试图用Visual Studio Code构建一个Python开发环境。 | Developers.IO
调试
我尝试了Python调试方法中的所有方法。
如果您遵循使用VS Code调试Python的环境构造(用于执行NumPy,SciPy,Matplotlib的环境构造),则该操作方法可以。
在此阶段,我能够在不编辑配置文件的情况下进行调试。
参考
-
使用Visual Studio Code --Qiita准备Python开发环境
-
使用Visual Studio Code-Qiita调试Node.js
-
如何获取Python版本--Qiita
更换棉绒工具
我将棉绒工具从
pylint更改为
安装flake8
从
终端使用
1 | % pip install flake8 |
皮棉工具更改
编辑
settings.json
1 2 3 4 5 6 7 8 9 | { // それぞれのユーザー特有の設定 // "files.autoSave": "afterDelay", // python関連の設定 "python.pythonPath":"/Users/[USERNAME]/.pyenv/shims/python", // pyenv関連 "python.linting.pylintEnabled": false, // Disable pylint "python.linting.flake8Enabled": true // Enable flake8 } |
参考
-
Linting·DonJayamanne / pythonVSCode Wiki
-
使用Visual Studio Code-Qiita
进行Python编码的设置
使用Docker
提前准备
Docker安装
我认为官方网站上的安装过程会有所帮助。我用
1 | $ brew cask install docker # だったと思うけれどだいぶ前のことなので自信がない |
参考
-
安装Docker | Docker文档
-
Docker平台
-
获取适用于Ubuntu的Docker CE | Docker文档
安装Jupyter Notebook
这次,我将使用安装了Jupyter Notebook的图像。在本地安装时,Anaconda似乎建议使用它。
已安装映像
的示例
-
tensorflow / README.md(掌握)·tensorflow / tensorflow
-
docker-stacks / tensorflow-notebook at master·jupyter / docker-stacks
我想散布一个事实,即前者不仅包括Tensorflow执行环境,还包括Scikit Learn,Scipy,Numpy和Jupyter Notebook。我会在下一个Google视频中突然推荐Docker。
这很容易看到,它为您带来快乐的介绍,并且有示例代码,因此感觉不错! Hello World-机器学习食谱#1 https://t.co/HQ0RYnBxCO @YouTube
—龙一郎(@K_Ryuichirou)2017年9月17日
为了在后者中使用TensorBoard,您需要以某种方式再次执行
pip install tensorflow 。在VS Code
中安装扩展
无论如何,我都会在Docker和Docker上使用Jupyter Notebook,因此请安装扩展。
Microsoft / vscode-docker:VS Code的Docker扩展。
Jupyter --Visual Studio市场
操作检查
使用
F1 键启动命令面板后,键入:如果您半途输入,完成将起作用。
1 >Docker: Add docker files to workspace反复按Enter键。
可以使用以下内容生成Dockerfile。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 # golang:onbuild automatically copies the package source,
# fetches the application dependencies, builds the program,
# and configures it to run on startup
FROM golang:onbuild
LABEL Name=vscodehandson Version=0.0.1
EXPOSE 3000
# For more control, you can copy and build manually
# FROM golang:latest
# LABEL Name=vscodehandson Version=0.0.1
# RUN mkdir /app
# ADD . /app/
# WORKDIR /app
# RUN go build -o main .
# EXPOSE 3000
# CMD ["/app/main"]容器启动和连接
启动容器
您可以从
VS Code运行它。按F1键,
Docker: Run 正常。
连接到容器
您可以使用F1键的
>Docker: Attach Shell to a running container 以及来完成此操作。
当执行
时,将显示当前正在运行的容器,因此您可以通过选择要连接的容器来进行连接。
奖励:Kitematic
黑屏我并不害怕,但是我使用Kitematic是因为我想要一个GUI。介绍性文章在此进行了详细介绍。
[Docker]让我们使用Kitematic! -齐塔(Qiita)
在
Kitematic中,您可以指定要用VOLUME挂载的主机的目录,但是,如果映像没有在
dockerfile 中指定(从2017年9月开始)VOLUME,则似乎无法使用该功能。展望下一个问题,自2016年以来似乎一直在提供支持,但似乎尚未发布。
- 向现有的kitematic容器中添加卷吗?·问题号1923·docker / kitematic
Tensorflow的官方映像不包含VOLUME命令,因此我创建了以下Dockerfile。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 FROM tensorflow/tensorflow:latest-py3
RUN pip --no-cache-dir install \
edward \
ptvsd==3.0.0
RUN mkdir /notebooks/mmt
# TensorBoard
EXPOSE 6006
# Jupyter
EXPOSE 8888
# ptvsd
EXPOSE 3000
WORKDIR "/notebooks"
VOLUME "/notebooks/mmt"
CMD ["/run_jupyter.sh", "--allow-root"]我已经将
爱德华添加为爱好,接下来我将讨论ptvsd。
在Docker上使用容器进行远程调试
VS Code支持Python远程调试。让我们从这里看一下设置。
这次,我们将在Docker上的容器中执行Python代码,并从Docker主机(=本地环境)上的VSCode进行调试。
ptvsd
似乎Visual Studio最初支持Python的远程调试,并且该功能也可以与VS Code一起使用。
用Visual Studio开发Python似乎并不熟悉,但是我已经看到Chainer在开发。
- Python开发人员工具| Visual Studio
ptvsd本身在PyPI上分发。
- ptvsd 3.2.1:Python软件包索引
ptvsd安装
ptvsd安装在执行Python代码的一侧,因此请在Dockerfile中包含有关安装ptvsd的说明。
另外,由于远程调试与TCP / IP端口通信,因此请使用Dockerfile等指定要暴露给外部的端口。
您可以看到上述描述也包含在Dockerfile中。
1
2
3
4 RUN pip --no-cache-dir install ptvsd==3.0.0
# ptvsd
EXPOSE 3000当前,除非您指定3.0.0而不是ptvsd的最新版本,否则它不起作用。我认为该版本计划在ptvsd端得到4.0版本的支持,但是很抱歉,找不到源。
- VS代码远程调试连接失败·问题#1039·DonJayamanne / pythonVSCode
ptvsd的设置(Docker端)
ptvsd使用简单,只需在运行Python代码时加载并执行模块即可。
1
2 import ptvsd
ptvsd.enable_attach("my_secret", address = ('0.0.0.0', 3000))但是,在以下步骤中,您需要在Docker上添加Python代码并在本地环境中从VS Code运行它,并且
您应该防止在本地环境中执行此行。正式建议在Docker环境和本地环境中分离两个源代码,并在本地环境中注释掉这两行,但是
我认为最好使用环境变量使其仅在Docker上运行。这一次,当在Docker环境中执行时,将字符串" debug"赋予命令行参数,以区分Docker环境和本地环境。
1
2
3
4
5
6
7
8 # usage: $ python RemoteDebug.py debug
import sys
if (len(sys.argv) > 1) and (sys.argv[1] == "debug"):
import ptvsd
print("waiting...")
ptvsd.enable_attach("my_secret", address=('0.0.0.0', 3000))
ptvsd.wait_for_attach()VS代码设置(本地)
将连接目标信息写入VSCode的
launch.json ,以连接到Docker容器。几乎不用编辑就可以了。launch.json
1
2
3
4
5
6
7
8
9
10 {
"name": "Attach (Remote Debug)",
"type": "python",
"request": "attach",
"localRoot": "${workspaceRoot}",
"remoteRoot": "${workspaceRoot}",
"port": 3000,
"secret": "my_secret",
"host": "localhost"
}有一些假设,因此我将对其进行补充。
- 将要安装在Docker容器上的文件夹与用于放置Python脚本和jupyter笔记本的文件夹匹配。
- 如果更改它,则可以更改" localRoot"和" remoteRoot"。
- 假设Docker容器可以在端口3000上与本地环境通信。
- 您可以使用Docker命令或Kitematic进行检查
- 可以改变
调试
让我们使用以下代码进行验证。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import sys
import numpy as np
if (len(sys.argv) > 1) and (sys.argv[1] == "debug"):
import ptvsd
print("waiting...")
ptvsd.enable_attach("my_secret", address=('0.0.0.0', 3000))
ptvsd.wait_for_attach()
print('hello python!')
for i in range(10 ** 5):
print("") #nop
pass
print('python version:' + str(sys.version_info))
## i = ?
print('numpy version:' + np.version.full_version)在本地环境中准备(VSCode)
在VS Code端将调试配置更改为"附加(远程调试)"。
如下在VS Code端设置断点。
另外,编辑断点并创建条件断点。
在Docker端进行准备
以任何合适的方式运行以上带有调试参数的Python代码。对于Jupyter Notebook,在单元格中输入以下内容并执行。
Jupyter Notebook<br>
!python RemoteDebug.py debug<br>
如果显示器正在等待连接,则可以。
远程调试
从VS Code调试时,如果VS Code显示以下屏幕,则可以连接。 (断点编辑弹出窗口没有显示是正确的...)
如果检查Docker端,应该看到以下显示。您可以看到执行从等待连接的状态开始,并且执行了打印。
在
VSCode端,未显示变量及其内容,因此我有点不耐烦,但是如果单击"调用堆栈"中的
<module> ,它将显示出来。
我认为此处的行为未正确设置,因此有必要进行调查。
在末尾
我能够使用VS Code成功连接到Docker环境并进行调试!
现在您可以使用Docker准备TensorFlow环境并执行远程调试!
之后,我应该可以使用
tfdbg 调试TensorFlow,但是
显然,这是一个终端前提,因此我将放弃并进入Docker容器并执行它。以上项目已在Github上发布,因此请立即尝试。
- Sueiyama Asei / VSCodeHandsOn
参考资料
VSCode
一般故事
PyCon JP 2017 Sprint --Python x VSCode
Python:获取命令行参数– sys.argv变量
python扩展
构建用于使用VS Code调试Python的环境(构建用于执行NumPy,SciPy,Matplotlib的环境)--BEACHSIDE BLOG
DonJayamanne / pythonVSCode:使用Visual Studio Code
跨平台编辑,调试,整理,测试(及更多)Python(2.7至3.6)代码(包括Jupyter支持)
主页·DonJayamanne / pythonVSCode Wiki
远程调试| Visual Studio Code
中的Python
码头工人扩展
- Microsoft / vscode-docker:VS Code的Docker扩展。
Docker
Mac版Docker与Docker Toolbox | Docker文档
如何将Docker映像注册到Docker Hub --Qiita
Dockerfile命令-Qiita
如何编写Dockerfile"私有"最佳实践-Yohei no Hibi devotion XP
编写Dockerfile --Qiita
[简介] Dockerfile的基础写作| RecoChoku工程师博客
总结我对Docker的Volume函数--Qiita进行的实验
[Docker]使用Docker --Qiita安装主机目录
我好奇的其他事情,所以我检查了一下
kenkoooo / jupyter-autopep8:Jupyter笔记本电脑的PEP8格式化程序
blei-lab / edward:一个用于概率建模,推理和批评的库。深入的生成模型,变异推理。在TensorFlow上运行。
调试TensorFlow程序| TensorFlow