我有一个带有XP SP3 32位和ActivePython 2.7.2 32位社区版的干净虚拟机,当前目录为“ C:\ test”。我已将sitecustomize.py与“ print('dir1')”代码独立于“ C:\ test \ dir1”,并将sitecustomize.py与“ print('dir2')”代码独立于“ C:\ test \ dir2”。

如果我将PYTHONPATH设置为dir1dir2,则会执行相应的sitecustomize.py

C:\test> set PYTHONPATH=C:\test\dir1\
C:\text> python
dir1
>>>exit()
C:\test> set PYTHONPATH=C:\test\dir2\
C:\text> python
dir2


但是,如果我将两个目录都添加到pythonpath中,则仅执行第一个目录的sitecustomize.py

C:\test> set PYTHONPATH=C:\test\dir1\;C:\test\dir2\
C:\text> python
dir1
>>>exit()
C:\test> set PYTHONPATH=C:\test\dir2\;C:\test\dir1\
C:\text> python
dir2


那么是否有可能在PYTHONPATH和多个sitecustomize.py中有多个dirs,或者我仅限于一个?文档指出,我在PYTHONPATH中可以有很多目录,但是它并没有说明sitecustomize.py

最佳答案

是的,您可以在PYTHONPATH中列出多个目录。

sitecustomize是一个在解释程序启动时自动导入的模块。因此,如果您的sitecustomize.py上有多个PYTHONPATH,则只会加载第一个。

documentation中描述了该过程:


  经过这些路径操作后,将尝试导入名为sitecustomize的模块,该模块可以执行任意特定于站点的自定义。它通常由系统管理员在site-packages目录中创建。如果此导入失败并出现ImportError异常,它将被静默忽略。

10-01 10:48