簡體   English   中英

PyCharm 覆蓋用作解釋器的 docker 容器中的 PYTHONPATH

[英]PyCharm overwrites PYTHONPATH in a docker container being used as an interpreter

我有一個包含各種位的 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解釋器設置

如果我然后在 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 的值?

您可以在“首選項”中進行設置 見下圖 設置環境設置

您可以設置環境變量,也可以更新“啟動腳本”部分。 無論哪種方式更適合你,兩者都可以勝任

如果您需要進一步的幫助, 閱讀以下文章https://www.jetbrains.com/help/pycharm/python-console.html

您可以使用 .pth 文件而不是 PYTHONPATH

嘗試

RUN echo $SPARK_HOME/python > /usr/local/lib/python3.7/site-packages/spark.pth
RUN echo $SPARK_HOME/python/lib/py4j-0.9-src.zip >> /usr/local/lib/python3.7/site-packages/spark.pth

根據您的 python 版本更改目標路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM