sys.path() 和 PYTHONPATH 问题
问题描述
我一直在学习 Python,我正在使用 2.7.3,我正在尝试理解 import
语句.
I've been learning Python, I'm working in 2.7.3, and I'm trying to understand import
statements.
文档说当当您尝试导入模块时,解释器将首先搜索其中一个内置模块.
The documentation says that when you attempt to import a module, the interpreter will first search for one of the built-in modules.
内置模块是什么意思?
然后,文档说解释器在 sys.path 列出的目录中搜索,并且 sys.path 是从这些来源初始化的:
Then, the documentation says that the interpreter searches in the directories listed by sys.path, and that sys.path is initialized from these sources:
- 包含输入脚本的目录(或当前目录).
PYTHONPATH
(目录名称列表,与 shell 变量PATH
语法相同).- 依赖于安装的默认值.
- the directory containing the input script (or the current directory).
PYTHONPATH
(a list of directory names, with the same syntax as the shell variablePATH
).- the installation-dependent default.
这是我的计算机在命令行模式下使用 python 的 sys.path 命令的示例输出:(我删除了一些以使其不会很大)
Here is a sample output of a sys.path command from my computer using python in command-line mode: (I deleted a few so that it wouldn't be huge)
['', '/usr/lib/python2.7', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
现在,我假设"路径是指包含脚本"的目录,因此我认为其余的路径将来自我的 PYTHONPATH
环境变量.但是,当我转到终端并键入 env
时,PYTHONPATH
不作为环境变量存在.我也尝试了 import os
然后 os.environ
,但我得到了相同的输出.
Now, I'm assuming that the '' path refers to the directory containing the 'script', and so I figured the rest of them would be coming from my PYTHONPATH
environmental variable. However, when I go to the terminal and type env
, PYTHONPATH
doesn't exist as an environmental variable. I also tried import os
then os.environ
, but I get the same output.
我真的没有 PYTHONPATH 环境变量吗?我不相信我曾经专门定义过 PYTHONPATH 环境变量,但我认为当我安装新软件包时,它们会自动更改该环境变量.如果我没有 PYTHONPATH,我的 sys.path 是如何填充的?如果我下载了新包,如果我没有这个 PYTHONPATH 变量,Python 怎么知道去哪里寻找它们?
Do I really not have a PYTHONPATH environmental variable? I don't believe I ever specifically defined a PYTHONPATH environmental variable, but I assumed that when I installed new packages they automatically altered that environment variable. If I don't have a PYTHONPATH, how is my sys.path getting populated? If I download new packages, how does Python know where to look for them if I don't have this PYTHONPATH variable?
环境变量如何工作?据我了解,环境变量特定于为其设置的进程,但是,如果我打开多个终端窗口并运行 env
,它们都会显示许多相同的变量,例如,<代码>路径代码>.我知道持久性环境变量的文件位置,例如 /etc/environment
,其中包含我的 PATH
变量.是否可以判断持久环境变量的存储位置?存储新的持久环境变量的推荐位置是什么?环境变量实际上如何与 Python 解释器一起工作?Python 解释器会查找 PYTHONPATH
,但它在细节层面是如何工作的?
How do environment variables work? From what I understand, environment variables are specific to the process for which they are set, however, if I open multiple terminal windows and run env
, they all display a number of identical variables, for example, PATH
. I know there file locations for persistent environment variables, for example /etc/environment
, which contains my PATH
variable. Is it possible to tell where a persistent environment variable is stored? What is the recommended location for storing new persistent environment variables? How do environment variables actually work with say, the Python interpreter? The Python interpreter looks for PYTHONPATH
, but how does it work at the nitty-gritty level?
解决方案
一口气问这么多问题!:)
So many questions in one go! :)
好吧,我试着只回答其中的几个.
Well I try to answer only a few of them.
1) 内置模块是 Python 版本附带的任何模块.例如 sys 和 os 模块是内置模块.原来如此.
1) a built-in module is any module that comes with a python release. For instance the sys and os modules are built-in modules. That's it really.
2) PYTHONPATH 变量在您的系统上默认不存在.当您启动 python 解释器时,它会按照您描述的方式填充搜索模块的路径数组.这是 sys.path 的结果.但是 sys.path 不是环境变量 PYTHONPATH.如果您在系统中设置 PYTHONPATH,则其中包含的所有路径都将包含在 python 解释器用于搜索模块的数组中.
2) The PYTHONPATH variable don't exist by default on your system. When you launch the python interpreter, it fills the array of path where it search for modules, in the way you described. This is the result of sys.path. However sys.path is not the environment variable PYTHONPATH. If you set the PYTHONPATH in your system, then all the path contained in it will be included in the array that python's interpreter uses to search for modules.
我会将环境变量的答案留给其他人,因为我觉得我不是回答此类问题的合适人选.不过,我的感觉是,它可能会因系统而异.总之……
I will leave the answer to the environment variables for others, as I don't feel I'm the right person to answer such a question. My feeling though, is that it might change from system to system. Anyway...
希望对你有帮助.
相关文章