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

我有一个包含各种位的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 

我可以构build然后运行该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的价值!

问题是,如果我使用与解释器相同的泊坞窗图像,PyCharm中的行为是不同的。 以下是我如何设置翻译:

python解释器设置

如果我然后在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而不是覆盖它,但如果有我无法find它。 任何人可以提供任何build议? 我怎样才能使用一个docker的形象作为PyCharm的远程解释器,并保持PYTHONPATH的价值?

您可以在首选项中设置。 看到下面的图片 设置环境设置

您可以设置环境variables,或者您更新启动脚本部分。 无论哪种方式更适合你,都将完成这项工作

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