提问人:user2153235 提问时间:9/1/2023 最后编辑:user2153235 更新时间:9/15/2023 访问量:195
PYTHONPATH 未从 CMD 传播到 Spyder
PYTHONPATH not propagating from CMD to Spyder
问:
我通过发出以下命令在 Anaconda 下安装了 PySpark 在 Conda 提示符下:
conda create -n py39 python=3.9 anaconda
conda activate py39
conda install openjdk
conda install pyspark
conda install -c conda-forge findspark
可以看出,这一切都在环境中。
此外,我从 GitHub 获取了 Hadoop 2.7.1 并创建以包含相应的文件和子文件夹 [1]。这里,是.最后,我必须创建文件(附件 A)。py39
c:%HOMEPATH%\AppData\Local\Hadoop\2.7.1
README.md
bin
%HOMEPATH%
\Users\User.Name
%SPARK_HOME%/conf/spark-defaults.conf
通过上述设置,我可以使用以下脚本启动 PySpark:myspark.cmd
c:%HOMEPATH%\anaconda3\envs\py39\bin\
set "PYSPARK_DRIVER_PYTHON=python"
set "PYSPARK_PYTHON=python"
set "HADOOP_HOME=c:%HOMEPATH%\AppData\Local\Hadoop\2.7.1"
pyspark
我现在正在关注这个
页面,以便能够使用 Spyder 而不是 Conda 命令行。我是
使用以下脚本设置变量
并启动Spyder:SpyderSpark.cmd
set "HADOOP_HOME=c:%HOMEPATH%\AppData\Local\Hadoop\2.7.1"
set "JAVA_HOME=C:%HOMEPATH%\anaconda3\envs\py39\Library"
set "SPARK_HOME=C:%HOMEPATH%\anaconda3\envs\py39\lib\site-packages\pyspark"
set "PYSPARK_DRIVER_PYTHON=Python"
set "PYSPARK_PYTHON=Python"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;%PYTHONPATH%"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python;%PYTHONPATH%"
C:%HOMEPATH%\anaconda3\pythonw.exe ^
C:%HOMEPATH%\anaconda3\cwp.py ^
C:%HOMEPATH%\anaconda3\envs\py39 ^
C:%HOMEPATH%\anaconda3\envs\py39\pythonw.exe ^
C:%HOMEPATH%\anaconda3\envs\py39\Scripts\spyder-script.py
一些可能不清楚的要点:
文件夹包含和
%JAVA_HOME%\bin
java.exe
javac.exe
上面代码块的后半部分是命令 由 Anaconda 的快捷方式执行
Spyder (py39)
当我还在努力开始工作时,我执行了它
从 Conda 提示符,特别是环境。这边
它继承了我可能遗漏的环境变量。发行启动Spyder GUI,
但在控制台上无法识别 Spark 命令。这是一个
对前几行代码的响应的脚本
教程:SpyderSpark.cmd
py39
SpyderSpark.cmd
SpyderSpark.cmd
In [1]: columns = ["language","users_count"]
...: data = [("Java", "20000"), ("Python", "100000"), ("Scala", "3000")]
In [2]: spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
NameError: name 'SparkSession' is not defined
可能的原因是,除了变量之外,所有变量都传播了
他们的值进入 Spyder 会话。从Spyder控制台:PYTHONPATH
import os
print(os.environ.get("HADOOP_HOME"))
print(os.environ.get("JAVA_HOME"))
print(os.environ.get("SPARK_HOME"))
print(os.environ.get("PYSPARK_DRIVER_PYTHON"))
print(os.environ.get("PYSPARK_PYTHON"))
print(os.environ.get("PYTHONPATH"))
c:\Users\User.Name\AppData\Local\Hadoop\2.7.1
C:\Users\User.Name\anaconda3\envs\py39\Library
C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark
Python
Python
None
为什么 PYTHONPATH
没有传播到 Spyder 会话中,以及如何传播
我可以解决这个问题吗?
我不认为这 Q&A 解释了 问题,因为我在设置变量后从 CMD 环境启动 Spyder。此外,所有其他变量都成功 传播到 Spyder 会话。
笔记
[1] 使用 Cygwin,我发现对于 中的所有文件,权限位
执行已禁用,需要显式启用。c:%HOMEPATH%\AppData\Local\Hadoop\2.7.1\bin
后记 2023-09-02:
受访者发布了有关如何获取 Spark 命令的有用提示
在 Spyder 中识别,即第一个问题。我没有看到这个教程代码,因为它在屏幕截图中,并且图像被 AdBlocker 阻止了。此外,从环境的 Conda 提示发出后不需要它。正如我从评论中发现的那样,发布后需要它,这允许识别 Spark 语句。因此,我假设它是代表用户导入的,因此在从 Conda 提示符启动后无需显式导入它。from pyspark.sql import SparkSession
pyspark
py39
SpyderSpark.cmd
pyspark
SparkSession
pyspark
尽管知道 SparkSession 需要从 Spyder 中导入很有用,但它并没有回答为什么 1 of 6 的问题
环境变量无法从 Spyder 传播,
即变量 .诚然,它解决了真正的问题
目前对我来说,这是为了让 Spark 从 Spyder 工作,为此我感谢受访者。
我仍然对为什么不传播感兴趣。SpyderSpark.cmd
PYTHONPATH
PYTHONPATH
在一个单独但相关的问题上,我发现创建一个快捷方式不会在
桌面。解决方案原来是作为Spyder启动的前缀
带有 start
的命令:SpyderSpark.cmd
set "HADOOP_HOME=%USERPROFILE%\AppData\Local\Hadoop\2.7.1"
set "JAVA_HOME=%USERPROFILE%\anaconda3\envs\py39\Library"
set "SPARK_HOME=%USERPROFILE%\anaconda3\envs\py39\lib\site-packages\pyspark"
set "PYSPARK_DRIVER_PYTHON=Python"
set "PYSPARK_PYTHON=Python"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;%PYTHONPATH%"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python;%PYTHONPATH%"
start "" ^
%USERPROFILE%\anaconda3\pythonw.exe ^
%USERPROFILE%\anaconda3\cwp.py ^
%USERPROFILE%\anaconda3\envs\py39 ^
%USERPROFILE%\anaconda3\envs\py39\pythonw.exe ^
%USERPROFILE%\anaconda3\envs\py39\Scripts\spyder-script.py
理想情况下,所有以 开头的论点都是
用双引号括起来,以防它们扩展为
非字母数字字符。出于某种原因,我不能那样做
而不会招致附件B(下文)中的不正确行为。因此,我没有用双引号来装饰论点。%USERPROFILE%
使用上面修订的SpyderSpark,Windows快捷方式的字段
应包含:Target
%SystemRoot%\System32\cmd.exe /D /C "%USERPROFILE%\anaconda3\envs\py39\bin\SpyderSpark.cmd"
我发现只需复制Spyder快捷方式并修改字段就很方便。为了便于阅读,这里是相同的命令
分为两条物理线(不适用于快捷方式的领域):Target
Target
%SystemRoot%\System32\cmd.exe /D /C ^
"%USERPROFILE%\anaconda3\envs\py39\bin\SpyderSpark.cmd"
感谢 Mofi 对改进此后记的建议。
进一步排除故障 2023-09-03
为了进一步解决环境变量传播到 Spyder 的问题,我听从了 Mofi 的建议,修改为使用
面向控制台而不是面向 GUI :PYTHONPATH
SpyderSpark.cmd
python
pythonw
set "HADOOP_HOME=%USERPROFILE%\AppData\Local\Hadoop\2.7.1"
set "JAVA_HOME=%USERPROFILE%\anaconda3\envs\py39\Library"
set "SPARK_HOME=%USERPROFILE%\anaconda3\envs\py39\lib\site-packages\pyspark"
set "PYSPARK_DRIVER_PYTHON=Python"
set "PYSPARK_PYTHON=Python"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;%PYTHONPATH%"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python;%PYTHONPATH%"
set PYTHONPATH & REM HHHHHHHHHHHHHHHHH
%USERPROFILE%\anaconda3\python.exe ^
%USERPROFILE%\anaconda3\cwp-debug.py ^
%USERPROFILE%\anaconda3\envs\py39 ^
%USERPROFILE%\anaconda3\envs\py39\python.exe ^
%USERPROFILE%\anaconda3\envs\py39\Scripts\spyder-script.py
从上面可以看出,在Spyder启动命令之前也会显示在屏幕上。此外,还进行了修订
使用修改后的 ,配音 ,其中打印出两次:PYTHONPATH
SpyderSpark.cmd
cwp.py
cwp-debug.py
PYTHONPATH
import os
import sys
import subprocess
from os.path import join, pathsep
from menuinst.knownfolders import FOLDERID, get_folder_path, PathNotFoundException
# call as: python cwp.py PREFIX ARGs...
prefix = sys.argv[1]
args = sys.argv[2:]
new_paths = pathsep.join([prefix,
join(prefix, "Library", "mingw-w64", "bin"),
join(prefix, "Library", "usr", "bin"),
join(prefix, "Library", "bin"),
join(prefix, "Scripts")])
print(os.environ["PYTHONPATH"]) ###################
env = os.environ.copy()
env['PATH'] = new_paths + pathsep + env['PATH']
env['CONDA_PREFIX'] = prefix
documents_folder, exception = get_folder_path(FOLDERID.Documents)
if exception:
documents_folder, exception = get_folder_path(FOLDERID.PublicDocuments)
if not exception:
os.chdir(documents_folder)
print(env["PYTHONPATH"]) ######################
sys.exit(subprocess.call(args, env=env))
从 CMD 控制台执行时,预期的内容由 和 在两者处打印出来
中的位置。此外,得到回应
当它被附加到 in 时,到屏幕。我有
将会议记录中的行集中在一起,以便不同的
的回声更容易识别:SpyderSpark.cmd
PYTHONPATH
SpyderSpark.cmd
cwp-debug.py
PYTHONPATH
SpyderSpark.cmd
PYTHONPATH
C:\Users\User.Name> C:\Users\User.Name\anaconda3\envs\py39\bin\SpyderSpark.cmd
C:\Users\User.Name> set "HADOOP_HOME=C:\Users\User.Name\AppData\Local\Hadoop\2.7.1"
C:\Users\User.Name> set "JAVA_HOME=C:\Users\User.Name\anaconda3\envs\py39\Library"
C:\Users\User.Name> set "SPARK_HOME=C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark"
C:\Users\User.Name> set "PYSPARK_DRIVER_PYTHON=Python"
C:\Users\User.Name> set "PYSPARK_PYTHON=Python"
C:\Users\User.Name> set "PYTHONPATH=C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;"
C:\Users\User.Name> set "PYTHONPATH=C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python;C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;"
C:\Users\User.Name> set PYTHONPATH & REM HHHHHHHHHHHHHHHHH
PYTHONPATH=C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python;C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;
C:\Users\User.Name> C:\Users\User.Name\anaconda3\python.exe C:\Users\User.Name\anaconda3\cwp-debug.py C:\Users\User.Name\anaconda3\envs\py39 C:\Users\User.Name\anaconda3\envs\py39\python.exe C:\Users\User.Name\anaconda3\envs\py39\Scripts\spyder-script.py
C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python;C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;
C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python;C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;
fromIccProfile: failed minimal tag size sanity
C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\paramiko\transport.py:219: CryptographyDeprecationWarning: Blowfish has been deprecated
"class": algorithms.Blowfish,
C:\Users\User.Name>
关于 和 的最后警告是
无害的。关于警告的解释可以是
找到 这里 和 这里 而警告只是关于弃用。因此,对 和 的修改(以 )并没有揭示为什么无法传播到 Spyder。fromIccProfile
Blowfish
fromIccProfile
Blowfish
SpyderSpark
cwp.py
cwp-debug.py
PYTHONPATH
下一步是检查是否被破坏
by ,这是一个非常短的脚本:PYTHONPATH
spyder-script.py
import re
import sys
from spyder.app.start import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
我实际上正在尝试在 Python 上启动,所以我想知道是否 任何人都可以帮助破译这个密码。
进一步排除故障 2023-09-06
Mofi 解释说,上面的正则表达式替换只是从脚本名称中删除了后缀或后缀,这只会影响文件标识
显示在诊断消息中。spyder-script.py
-script.py[w]
.exe
我注意到随后的语句从模块调用。我检查了,
重点放在 .我找到了从中删除路径的预导码代码。我在 Spyder 中确认了这一点:不包含由 . 在运行之前为空,因此没有其他路径可以检查。main()
spyder.app.start
%USERPROFILE%\anaconda3\envs\py39\Lib\site-packages\spyder\app\start.py
main()
PYTHONPATH
sys.path
sys.path
PYTHONPATH
SpyderSpark.cmd
PYTHONPATH
SpyderSpark.cmd
至于它的消失,我看不到任何代码可以修改或删除它
变量。但是,这并不重要,
as 仅贡献并显式删除了 中的路径。PYTHONPATH
start.py
os.environ['PYTHONPATH']
PYTHONPATH
sys.path
start.py
PYTHONPATH
sys.path
我缺乏经验来理解为什么要这样做。Spyder 应该提供一个开发 IDE,但如果它删除了 PYTHONPATH 中的路径,它就很难使用。
附件 A:%SPARK_HOME%/conf/spark-defaults.conf
这里,是:%SPARK_HOME%
C:%HOMEPATH%\anaconda3\envs\py39\lib\site-packages\pyspark
spark.eventLog.enabled true
spark.eventLog.dir C:\\Users\\User.Name\\anaconda3\\envs\\py39\\PySparkLogs
spark.history.fs.logDirectory C:\\Users\\User.Name\\anaconda3\\envs\\py39\\PySparkLogs
spark.sql.autoBroadcastJoinThreshold -1
附件B:参数被双引号引用时的错误行为start
SpyderSpark.cmd
运行时,将显示一个终端控制台,其中包含以下内容
消息:SpyderSpark.cmd
C:\Users\User.Name\Documents\Python Scripts>set "HADOOP_HOME=C:\Users\User.Name\AppData\Local\Hadoop\2.7.1"
C:\Users\User.Name\Documents\Python Scripts>set "JAVA_HOME=C:\Users\User.Name\anaconda3\envs\py39\Library"
C:\Users\User.Name\Documents\Python Scripts>set "SPARK_HOME=C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark"
C:\Users\User.Name\Documents\Python Scripts>set "PYSPARK_DRIVER_PYTHON=Python"
C:\Users\User.Name\Documents\Python Scripts>set "PYSPARK_PYTHON=Python"
C:\Users\User.Name\Documents\Python Scripts>set "PYTHONPATH=C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;"
C:\Users\User.Name\Documents\Python Scripts>set "PYTHONPATH=C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python;C:\Users\User.Name\anaconda3\envs\py39\lib\site-packages\pyspark\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;"
C:\Users\User.Name\Documents\Python Scripts>start "" "C:\Users\User.Name\anaconda3\pythonw.exe" ^
C:\Users\User.Name\Documents\Python Scripts>"C:\Users\User.Name\anaconda3\cwp.py" "C:\Users\User.Name\anaconda3\envs\py39" ^
[main 2023-09-02T23:29:02.117Z] update#setState idle
[main 2023-09-02T23:29:04.434Z] WSL is not installed, so could not detect WSL profiles
然后出现 VS Code 应用,打开文件(第 2 个
提供给 in 的参数。退出 VS Code 时,以下内容
其他消息将打印到终端控制台,后跟
Spyder应用程序的外观:cwp.py
start
SpyderSpark.cmd
[main 2023-09-02T23:29:09.998Z] Extension host with pid 21404 exited with code: 0, signal: unknown.
C:\Users\User.Name\Documents\Python Scripts>"C:\Users\User.Name\anaconda3\envs\py39\pythonw.exe" "C:\Users\User.Name\anaconda3\envs\py39\Scripts\spyder-script.py"
当我退出Spyder时,终端控制台消失了。
2023-09-06 后记:根据 Mofi 的说法,所有这些意外行为的原因是将 Spyder 启动命令错误地解析为多行语句。具体而言,物理行末尾的插入符号表示语句在下一行的延续,并且此插入符号前面不应有空格。相反,语句继续到的下一行物理行应该以空格开头。通过此修复,参数 to 可以被 double=quoted 引用,并且脚本仍以预期的方式启动 Spyder。这是修订后并正常工作:Start
SpyderSpark.cmd
set "HADOOP_HOME=%USERPROFILE%\AppData\Local\Hadoop\2.7.1"
set "JAVA_HOME=%USERPROFILE%\anaconda3\envs\py39\Library"
set "SPARK_HOME=%USERPROFILE%\anaconda3\envs\py39\lib\site-packages\pyspark"
set "PYSPARK_DRIVER_PYTHON=Python"
set "PYSPARK_PYTHON=Python"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;%PYTHONPATH%"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python;%PYTHONPATH%"
start ""^
"%USERPROFILE%\anaconda3\pythonw.exe"^
"%USERPROFILE%\anaconda3\cwp.py"^
"%USERPROFILE%\anaconda3\envs\py39"^
"%USERPROFILE%\anaconda3\envs\py39\pythonw.exe"^
"%USERPROFILE%\anaconda3\envs\py39\Scripts\spyder-script.py"
除了为了美观,我没有在任何地方看到描述这个处方,以避免在插入符号之前有一个空格,并以空格开始下一行。但是,它有效。在这种特定情况下,需要以空格开头的连续行可能是由于第一个字符是 ,用于分隔文件路径,但不是文件路径的一部分。由于连续行的第一个字符会自动转义,因此我们不希望 the 成为第一个字符,否则它会失去其特殊含义。"
"
答:
可能需要解决以下几个问题:
1 - 环境变量格式:
在代码中,你使用的是 %HOMEPATH%,而没有用 % 符号将其括起来。它应该是 %HOMEPATH% 才能正确引用主目录。例如,它应该是 ,而不是 。c:%HOMEPATH%\AppData\Local\Hadoop\2.7.1
c:\%HOMEPATH%\AppData\Local\Hadoop\2.7.1
2- 设置环境变量: 最好在启动 PySpark 之前设置环境变量,以确保为 PySpark 会话正确配置它们。在示例中,你在运行 pyspark 后设置变量。
3- 导入 SparkSession: 遇到的错误(NameError: name 'SparkSession' is not defined)表示尚未导入 Spark 所需的模块。您需要从脚本开头的 pyspark.sql 模块导入 SparkSession。
# Create and activate the Conda environment
conda create -n py39 python=3.9 anaconda
conda activate py39
# Install necessary packages
conda install openjdk
conda install pyspark
# Set environment variables (adjust paths accordingly)
set "HADOOP_HOME=C:\%HOMEPATH%\AppData\Local\Hadoop\2.7.1"
set "JAVA_HOME=C:\%HOMEPATH%\anaconda3\envs\py39\Library"
set "SPARK_HOME=C:\%HOMEPATH%\anaconda3\envs\py39\lib\site-packages\pyspark"
set "PYSPARK_DRIVER_PYTHON=python"
set "PYSPARK_PYTHON=python"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python\lib\py4j-0.10.9.7-src.zip;%PYTHONPATH%"
set "PYTHONPATH=%SPARK_HOME%\python\lib\site-packages\pyspark\python;%PYTHONPATH%"
# Launch PySpark
pyspark
# Inside the PySpark session
from pyspark.sql import SparkSession
columns = ["language", "users_count"]
data = [("Java", "20000"), ("Python", "100000"), ("Scala", "3000")]
# Create a SparkSession
spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
# Your Spark code here
# For example, you can create a DataFrame from the data
df = spark.createDataFrame(data, columns)
df.show()
# Don't forget to stop the SparkSession when done
spark.stop()
更正问题并执行以下步骤后,应该能够在 Conda 环境中正确启动 PySpark 会话并与 Spark 组件交互。
评论
%
\
%
%
myspark.cmd
pyspark
pyspark
SpyderSpark.cmd
import
HOMEPATH
c:\%HOMEPATH%
c:\\Users\User.Name
c:\Users\User.Name
%HOMEDRIVE%%HOMEPATH%
C:\%HOMEPATH%
%USERPROFILE%
%LOCALAPPDATA%
C:\%HOMEPATH%\AppData\Local
如 2023-09-06 进一步故障排除部分所述
question,则从中删除路径。跟
对 Spyder 进行更多试驾,一个可能的原因变得清晰起来:
Spyder维护自己的工具参数(工具->
PYTHONPATH 管理器')。start.py
PYTHONPATH
sys.path
PYTHONPATH
此 Q&A 演示如何
添加到执行 Spyder 的 shell 的路径中,最好事先测试它们的存在。
可以编写一个脚本来执行此操作,并通过 Spyder 的 .sys.path
PYTHONPATH
Tools -> Preferences -> IPython console -> Startup (tab)
我不清楚为什么Spyder被设计成维护自己的,而不是从环境中继承它。 取决于其他 Python 包/模块的设置方式,
随时间逐块变化。管理起来很危险
手动地。PYTHONPATH
PYTHONPATH
有趣的是,在 2019 年,Spyder 确实继承了环境,如果设置为(请参阅此 GitHub 错误
票)。在这个
bug 票,它马上就要修复了,所以似乎
修复是使用 Spyder 的 PYTHONPATH 管理器
所有情况。PYTHONPATH
Tools -> Preferences -> Python interpreter -> Python interpreter
Default (i.e. the same as Spyder's)
PYTHONPATH
然而,作为测试,我设置为 ,这是
从 py39 环境的 Conda 提示符发出的路径。经过以下两项测试后,什么都没有
显示自:Python interpreter
C:\Users\User.Name\anaconda3\envs\py39\python.exe
where python
import os; os.environ.get("PYTHONPATH")
exit()
从 Spyder 控制台,我猜它会重新启动 python 解释器- 退出和重新启动Spyder
与2019年相关的是 请求“避免 使用外部解释器时删除预定义的 PYTHONPATH”。 我对 GitHub 不够熟悉,无法了解发生了什么 请求,所以如果有人可以称量,谢谢!
最后,我还发现,除非你把自定义路径放到PYTHONPATH
中,否则它不需要传播到Spyder中。
在发布的问题中,添加到的两个路径分别来自
启动后发布
在。尽管Spyder内部是空的,
我发现这两条路径都包含在 、 或
间接。PYTHONPATH
os.environ.get("PYTHONPATH")
pyspark
myspark.cmd
PYTHONPATH
sys.path
两条路径中的第一条是 。如果我尝试添加这个
到 Spyder 的 PYTHONPATH 管理器,它抱怨路径无效。
检查其中的文件并使用 Cygwin 的 on 文件夹会发现这些文件是
解压缩到包文件夹中。如果我
正确理解我对包的解读,包是
可用于 Python,因为已经包含 .为什么从会话中指向 zip 文件,
我不知道。PYTHONPATH
%SPARK_HOME%\python\lib\py4j-0.10.9.7-src.zip
find
%USERPROFILE%\anaconda3\envs/py39
%USERPROFILE%\anaconda3\envs\py39\Lib\site-packages\py4j
py4j
sys.cmd
%USERPROFILE%\anaconda3\envs\py39\lib\site-packages
PYTHONPATH
pyspark
第二条路径是 。这是
已经包含在Spyder中。PYTHONPATH
%SPARK_HOME%\python
sys.path
剩下的一个问题是Spyder启动脚本是否有效
out 将这两个路径添加到,因为事先将它们添加到。我删除了 from 的设置,果然,两条路径是
仍然存在于Spyder中。sys.path
SpyderSpark.cmd
PYTHONPATH
PYTHONPATH
SpyderSpark.cmd
sys.path
因此,负责启动 Spyder 的脚本似乎还添加了
不需要 的必要路径。我
怀疑这是因为 Conda 设置了环境与所有
必要的依赖项。sys.path
PYTHONPATH
我还确认了如果之前确实包含自定义路径
到启动 Spyder,他们没有传播到内部
间谍。这仅仅证实了py4j zip
指向的文件 by 也没有传播到 中。
因此,我认为需要使用 Spyder 的 PYTHONPATH 管理器来
自定义路径或将自定义路径添加到使用代码。PYTHONPATH
sys.path
PYTHONPATH
sys.path
sys.path
评论