Причина в другом расположении пакетов Python - PullRequest
0 голосов
/ 17 января 2019

Я новичок в системе Linux и не имею опыта работы с операционной системой.

У меня есть некоторые проблемы с импортом numpy, но я решил это.

Но у меня все еще есть вопросы.

Я знаю, что могу использовать следующий код, чтобы узнать, где Python находит пакеты

import sys
sys.path()

, которые в моем случае дают несколько вариантов:

/home/twotwo/.local/lib/python3.6/site-packages
/usr/local/lib/python3.6/dist-packages
/usr/lib/python3/dist-packages

И мне хотелось бы знать разницу между первым и вторым

один, а также второй и третий.

Полагаю, что разница между первым и вторым вызвана тем, как я загружаю его, как указано на странице ниже, если нет, исправьте меня.

Мы рекомендуем использовать пользовательскую установку, используя флаг --user для pip (примечание: не используйте sudo pip, что может вызвать проблемы). Это устанавливает пакеты для вашего локального пользователя и не записывает в системные каталоги.

И второй, и третий имеют /user в начале

Но все еще существует разница между ними, у одного из которых есть local, а у другого нет.

Подводя итог моим вопросам:

(1) Разница между:

/home/twotwo/.local/lib/python3.6/site-packages 

/usr/local/lib/python3.6/dist-packages

(2) Разница между:

/usr/local/lib/python3.6/dist-packages

/usr/lib/python3/dist-packages

(3) На самом деле, два пути имеют ноль, но как Python выбирает, какой из них импортировать?

Большое спасибо всем вам и хорошего дня!

1 Ответ

0 голосов
/ 17 января 2019

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

Я постараюсьответьте на вопросы (1) и (2), суммируя, как обычно используются три указанные папки:

  • /usr/lib/python3/dist-packages содержит модули, не относящиеся к хосту, установленные системой с менеджером пакетов,например, в Ubuntu с sudo apt-get python-numpy.

  • /usr/local/lib/python3.6/dist-packages содержит модули, которые вы установили самостоятельно для всей системы, например, собрав их из исходного кода и установив их вручную, или с помощью sudo pip install numpy.(Конечно, использование sudo pip может вызвать проблемы, как вы правильно упомянули.)

  • /home/twotwo/.local/lib/python3.6/site-packages содержит модули, которые пользователь twotwo установил в своем собственном каталоге пользователя, например:используя pip в пользовательском режиме.Эти модули могут быть импортированы только с помощью twotwo, поскольку они не отображаются в переменных PATH другого пользователя и могут даже не читаться другим пользователем.

Что касается вопроса (3): Подробности об этом можно прочитать в документации по Python 3 .По сути, после поиска модуля в папке, из которой запускается ваш скрипт на python, папки в вашей переменной sys.path ищутся в том же порядке , в котором они там перечислены.Как только модуль с подходящим именем найден, он импортируется.

Примечание: Ваш вопрос не связан с numpy, поэтому тег следует удалить.

...