2014-01-18 3 views
7

Я смущен тем, как PyCharm определяет путь, который использует Python для поиска модулей и пакетов.Почему PyCharm всегда добавляет «корень содержимого» к моему PYTHONPATH и что PYTHONPATH?

Прежде всего, когда я сниму настройки (как в «Консоли Python», так и в моей конфигурации запуска), я по-прежнему вижу каталог для моего проекта в начале sys.path.

К примеру, у меня есть проект в «проблема пути» и «Run„там файл, содержащий

import sys 
for p in sys.path: 
    print p 

Я получаю

/Users/Rax/Documents/Projects/pathproblem 
... (other things in my PYTHONPATH) 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages 
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload 
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC 
/Library/Python/2.7/site-packages 

даже когда я просил“корень содержание "должны быть исключены из пути:

enter image description here

Это может привести к я n успешный импорт модулей, которые не будут импортированы в типичные развертывания (например, при создании пакета).

Если я проверить настройку я дважды:

/Users/Rax/Documents/Projects/pathproblem 
... (other things in my PYTHONPATH) 
/Users/Rax/Documents/Projects/pathproblem 
... 

Кажется, что PyCharm всегда добавляет текущий корень проекта в начале (то, что он считает) в PYTHONPATH и что этот параметр просто добавляет его снова в конце.

(1) Как настроить PyCharm так, чтобы он (действительно) не добавлял каталог проекта в путь поиска пакета?

Кроме того, насколько я могу судить, PYTHONPATH для PyCharm не является моей системой PYTHONPATH вообще, но «добавленные пользователем» записи - по сути, путано, в конце - настройки Path для Python Interpreter.

(2) Откуда берутся ПЯТОНПАТ ПИКХАРМА? Это не PYTHONPATH, который я вижу где-нибудь еще в моей системе.


FWIW, сфинкс уважает PyCharm в «корень» содержимое настроек, добавляя корень содержимого только тогда, когда путь, когда проверяется в конфигурации сборки.

ответ

11

Прежде всего, когда я сниму настройки (как в «Консоли Python», так и в моей конфигурации запуска), я все еще вижу каталог для моего проекта в начале sys.path.

Должно быть, поскольку PyCharm по умолчанию добавляет маршрут проекта к пути.

(1) Как настроить PyCharm так, чтобы он (действительно) не добавлял каталог проекта в путь поиска пакета?

Насколько я знаю, вы не можете. Однако вы можете сделать что-то, что не добавляет ваши файлы в маршрут контента. Однако, прежде чем показывать вам, как это сделать, позвольте мне объяснить, почему он добавляет текущий корень каталога к его пути.Когда вы откроете консоль питона:

                                                                                              enter image description here

Теперь у меня есть файл с именем foo.py, и в этом файле у меня есть функция под названием bar, так что я могу легко импортировать функцию в мой консоль:

enter image description here

Как вы можете видеть на картинке выше, PyCharm автоматически добавить свой текущий корень. Это не должно удивлять, когда вы входите в каталог и запускаете что-то вроде python foo.py, вы являетесь implicitly, добавляя текущий корень к вашему пути. К эмулирует это в консоли python, PyCharm добавляет текущий корень.

Чтобы избежать этого, вы можете просто создать папку внутри текущего корня и пометить его как корень источников:

                                enter image description here

И поскольку ваши Source корни не будут добавлены в пути, вы можете быть спокойны:

                                      enter image description here

(2) Где PYT PyCharm ГОНПАТ? Это не PYTHONPATH, который я вижу где-нибудь еще в моей системе.

Это происходит от ваших настроек переводчика:

enter image description here

В общем, PYTHONPATH по существу совокупность всех каталогов, которые разместятся ваши стандартные библиотечные файлы, а также файлы библиотек третьих сторон.

+0

«Как вы можете видеть на изображении выше, PyCharm автоматически добавляет ваш текущий корень». На самом деле, кажется, [пришел из самого Python] (http://stackoverflow.com/a/21203462/656912). И вопрос остается о (2): это только пользователь добавил пути? – orome

2

В этом случае «project/pathproblem» добавляется к sys.path самим Python, а не PyCharm. См. http://docs.python.org/2/library/sys.html#sys.path: «Как инициализировано при запуске программы, первым элементом этого списка является путь [0], это каталог, содержащий скрипт, который использовался для вызова интерпретатора Python».

Чтобы ответить на ваш второй вопрос, PyCharm строит PYTHONPATH, запустив выбранный интерпретатор Python со сценарием для печати содержимого sys.path, записи его результата и затем добавления необходимых изменений в зависимости от настроек проекта (Django, App Двигатель и т. Д.)

+0

Итак, PyCharm не использует мою «систему» ​​PYTHONPATH и вместо этого использует записи «добавленные пользователем» и конец настроек PathPreter Path для PyCharm, верно? Если это так, я понимаю, откуда эта часть пути. [То, что я не понимаю, это то, откуда приходит другой) (http://stackoverflow.com/q/21236384/656912). – orome

Смежные вопросы