python - PyCharm 覆盖用作解释器的 docker 容器中的 PYTHONPATH

标签 python docker pycharm

我有一个包含各种位的 docker 镜像,包括 Spark。这是我的 Dockerfile:

FROM docker-dev.artifactory.company.com/centos:7.3.1611

# set proxy
ENV http_proxy http://proxyaddr.co.uk:8080
ENV HTTPS_PROXY http://proxyaddr.co.uk:8080
ENV https_proxy http://proxyaddr.co.uk:8080

RUN yum install -y epel-release
RUN yum install -y gcc
RUN yum install -y krb5-devel
RUN yum install -y python-devel
RUN yum install -y krb5-workstation
RUN yum install -y python-setuptools
RUN yum install -y python-pip
RUN yum install -y xmlstarlet
RUN yum install -y wget java-1.8.0-openjdk
RUN pip install kerberos
RUN pip install numpy
RUN pip install pandas
RUN pip install coverage
RUN pip install tensorflow
RUN wget http://d3kbcqa49mib13.cloudfront.net/spark-1.6.0-bin-hadoop2.6.tgz
RUN tar -xvzf spark-1.6.0-bin-hadoop2.6.tgz -C /opt
RUN ln -s spark-1.6.0-bin-hadoop2.6 /opt/spark


ENV VERSION_NUMBER $(cat VERSION)
ENV JAVA_HOME /etc/alternatives/jre/
ENV SPARK_HOME /opt/spark
ENV PYTHONPATH $SPARK_HOME/python/:$PYTHONPATH
ENV PYTHONPATH $SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH

我可以构建然后运行该 docker 镜像,连接到它,并成功导入 pyspark 库:

$ docker run -d -it sse_spark_build:1.0
09e8aac622d7500e147a6e6db69f806fe093b0399b98605c5da2ff5e0feca07c
$ docker exec -it 09e8aac622d7 python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyspark import SparkContext
>>>import os
>>> os.environ['PYTHONPATH']
'/opt/spark/python/lib/py4j-0.9-src.zip:/opt/spark/python/:'
>>>

注意PYTHONPATH的值!

问题是,如果我使用同一个 docker 图像作为解释器,PyCharm 中的行为会有所不同。以下是我设置解释器的方式:

python interpreter setup

如果我随后在 PyCharm 中运行 Python 控制台,则会发生这种情况:

bec0b9189066:python /opt/.pycharm_helpers/pydev/pydevconsole.py 0 0
PyDev console: starting.
import sys; print('Python %s on %s' % (sys.version, sys.platform))
sys.path.extend(['/home/cengadmin/git/dhgitlab/sse/engine/fs/programs/pyspark', '/home/cengadmin/git/dhgitlab/sse/engine/fs/programs/pyspark'])
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
import os
os.environ['PYTHONPATH']
'/opt/.pycharm_helpers/pydev'

如您所见,PyCharm 已更改 PYTHONPATH,这意味着我无法再使用我想使用的 pyspark 库:

from pyspark import SparkContext
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ImportError: No module named pyspark

好的,我可以从控制台更改 PATH 以使其工作:

import sys
sys.path.append('/opt/spark/python/')
sys.path.append('/opt/spark/python/lib/py4j-0.9-src.zip')

但是每次我打开控制台时都必须这样做很乏味。我不敢相信没有办法告诉 PyCharm 追加到 PYTHONPATH 而不是覆盖它,但如果有的话我找不到它。任何人都可以提供任何建议吗?如何使用 docker 镜像作为 PyCharm 的远程解释器并保持 PYTHONPATH 的值?

最佳答案

您可以在首选项中进行设置。见下图 Setting the environment setup

您要么设置环境变量,要么更新启动脚本部分。无论哪种方式更适合您,两者都可以完成工作

如果您需要进一步的帮助,也请阅读以下文章 https://www.jetbrains.com/help/pycharm/python-console.html

关于python - PyCharm 覆盖用作解释器的 docker 容器中的 PYTHONPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45394268/

相关文章:

python - 需要帮助调试由 "Internal server error"引起的 heroku 应用程序上的 "JSON serializable"

docker-compose - Docker Compose 挂载卷错误 : No Such File or Directory

azure - 如何在 kubernetes 中使用 windows 容器挂载卷?

python - 使用 tf.data.Dataset.from_generator 时为 "SystemError: error return without exception set"

python - 你如何将第一个有效值向左移动?

Python pygame - 弹跳球(UnboundLocalError : local variable 'move_y' referenced before assignment)

docker - 为什么新构建的镜像没有新安装的软件包?

python - 'NoneType' 对象没有属性 'split' : Django 1. 11

python - 无法在 PyCharm 中调试。说 "No project interpreter",但它已配置

python - Beautifulsoup4 选择系统默认的 python2.6 而不是我本地的 python3