在PYTHONPATH中应确切设置什么?


72

我正在为python项目的其他开发人员编写和编写安装文档,并且我一直在阅读PYTHONPATH环境变量。我正在查看当前的开发系统,并认为我设置了一些错误,这导致我的IDE(IntelliJ)在查找python库时无法正常工作。

我在这里和这里已经看过文档,但是我仍然不确定PYTHONPATH环境变量中到底应该包含什么。

我已经PYTHONHOME指向`C:\ Python27'。

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

更新:

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

Answers:


41

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


3
PYTHONHOME实际上默认情况下指向标准库的目录(例如/ usr / local / lib / pythonXX)。
— 费迪南德·拜尔

2
@Ferdinand不在Windows上。没有设置。但要点是,除非用户拥有与默认库不同的私有库目录,否则用户通常不必与它们中的任何一个混淆。
— Mark Tolonen 2011年

3
当然没有设置-Python从不设置环境变量。但是,有一个内部等效项PYTHONHOME可以使用环境变量覆盖。我说的是这个内部变量的默认值。
— 费迪南德·拜尔

3
@“ Ferdinand Beyer”“当然没有设置-Python从不设置环境变量。”,那么最新的python 3.3至少可以将自身添加到PATH变量中。值得一提。
— twobob 2014年

23

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

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

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


4
好,所以你不应该。但是你应该怎么做?您想在路径中运行模块,而不希望源代码保存路径(不是相对路径,而且绝对不是静态路径)。
— pashute

2

这是我学到的: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标准和动态共享库以及第三方库(如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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.