我在Linux OS下使用python3和emacs(编辑器和shell)。为什么cwd不在sys.path中?我们怎么能把它,所有会议! 我谢谢你。
答案 0 :(得分:5)
您不希望将cwd()
添加到sys.path
。 始终添加cwd()
将是糟糕的主意,因为您无法再控制哪些文件可供导入。
Python会添加正在执行的脚本的目录。
E.g。当你跑:
python.exe path/to/script.py
然后path/to
会自动添加到sys.path
。
仅当您从当前目录运行脚本时,''
才会添加到路径的开头,这意味着将搜索当前工作目录的导入。例如。当你运行python.exe localfile.py
时,Python会添加当前的工作目录,假设您在导入时不会更改当前的工作目录。
请参阅命令行和环境文档中的Interface options:
如果脚本名称直接引用Python文件,则包含该文件的目录将添加到
sys.path
的开头,并且该文件将作为__main__
模块执行。
在程序启动时初始化时,此列表的第一项
的结果插入条目之前插入了脚本目录path[0]
是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或者从标准输入读取脚本),path[0]
是空字符串,它指示Python首先搜索当前目录中的模块。请注意,在PYTHONPATH
。
您始终可以明确地将当前工作目录添加到sys.path
:
import sys
if sys.path[0] != '':
sys.path.insert(0, '')
请注意,该工作目录中的任何python文件或包的名称与您在代码中已使用的模块相匹配,将掩盖该模块,很容易导致破坏。
答案 1 :(得分:1)
要永久更改它,请更改环境变量PYTHONPATH
。
答案 2 :(得分:0)
您可以更改PYTHONPATH
环境变量。
这会将位置添加到默认模块搜索路径。
docs表示,从命令行运行脚本时,
sys.path
中的第一项将是脚本的路径。
文档说sys.path
是
“从环境变量PYTHONPATH初始化,再加上与安装有关的默认值。”
例如,如果PYTHONPATH
为空(PowerShell:$env:PYTHONPATH = ""
),
仅添加依赖于安装的默认值。
但是,如果PYTHONPATH
以空字符串开头,
然后将当前工作目录(运行脚本的目录)添加到PYTHONPATH
。
(即使只是一个初始分隔符也会添加该分隔符,例如PowerShell中的分号:$env:PYTHONPATH = ";"
。)
这并非总是所需的行为,
因此您不妨在对PYTHONPATH
进行永久更改之前犹豫。