究竟应该在PYTHONPATH中设置什么?

时间:2011-10-21 14:28:50

标签: python

我正在为其他开发人员编写一个设置文档,为python项目工作,我一直在阅读PYTHONPATH环境变量。我正在查看我当前的开发系统,并认为我有一些错误导致我的IDE(IntelliJ)在查找python库时表现不正确。

我查看了文档herehere,我仍然不确定PYTHONPATH环境变量中应该包含哪些内容。

PYTHONHOME指向`C:\ Python27'。

我当前的PYTHONPATH设置为PYTHONHOME。我还应该从sys.path添加目录吗?

更新:

根据以下信息,除非您希望python能够在默认情况下找到非标准库,否则不需要设置PYTHONPATH。例如,当我从安装程序安装wxPython时,它会将其库添加到PYTHONPATH。我将PYTHONHOME设置为python安装的根目录,以便我可以将它添加到我的系统PATH环境变量中,以便我可以从任何位置运行python。

3 个答案:

答案 0 :(得分:35)

您不必设置其中任何一个。可以将PYTHONPATH设置为指向其中包含私有库的其他目录。如果没有设置PYTHONHOME,Python默认使用找到python.exe的目录,因此dir应该在PATH中。

答案 1 :(得分:20)

对于大多数安装,您不应设置这些变量,因为Python不需要它们运行。 Python知道在哪里可以找到它的标准库。

设置PYTHONPATH的唯一原因是维护您不想在全局默认位置(即site-packages目录)安装的自定义Python库的目录。

请务必阅读:http://docs.python.org/using/cmdline.html#environment-variables

答案 2 :(得分:1)

这是我学到的:PYTHONPATH是要添加到Python导入搜索路径“ sys.path”的目录,该目录由当前目录组成。 CWD,PYTHONPATH,标准和共享库以及客户库。例如:

% python3 -c "import sys;print(sys.path)"
['', 
'/home/username/Documents/DjangoTutorial/mySite', 
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', 
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']

其中第一个路径''表示当前目录。第二个路径通过

%export PYTHONPATH=/home/username/Documents/DjangoTutorial/mySite 

可以添加到〜/ .bashrc中以使其永久化,其余为Python标准和dynamic shared library以及第三方库(如django)。

如前所述,不要将PYTHONHOME弄乱,即使将其设置为”或“ None”也将导致python3 shell停止工作:

% export PYTHONHOME=''
% python3
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f18a44ff740 (most recent call first):
Aborted (core dumped)

请注意,如果您启动Python脚本,则CWD将是脚本的目录。 例如:

username@bud:~/Documents/DjangoTutorial% python3 mySite/manage.py runserver
==== Printing sys.path ====
/home/username/Documents/DjangoTutorial/mySite # CWD is where manage.py resides
/usr/lib/python3.6
/usr/lib/python3.6/lib-dynload
/usr/local/lib/python3.6/dist-packages
/usr/lib/python3/dist-packages

您还可以在运行时将路径追加到sys.path: 假设您在〜/ Documents / Python目录中有一个文件Fibonacci.py:

username@bud:~/Documents/DjangoTutorial% python3 
>>> sys.path.append("/home/username/Documents")
>>> print(sys.path)
['', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', 
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', 
'/home/username/Documents']
>>> from Python import Fibonacci as fibo

或通过

% PYTHONPATH=/home/username/Documents:$PYTHONPATH
% python3
>>> print(sys.path)
['', 
'/home/username/Documents', '/home/username/Documents/DjangoTutorial/mySite', 
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', 
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
>>> from Python import Fibonacci as fibo