2015-09-21 3 views
3

Я пытаюсь добавить каталог в PATH код остроумие, как это:Добавление каталога в sys.path с pathlib

PROJECT_DIR = Path(__file__).parents[2] 
sys.path.append(
    PROJECT_DIR/'apps' 
) 

Это не работает. Если я напечатать sys.path я вижу что-то вроде этого:

[..., PosixPath('/opt/project/apps')] 

Как исправить этот код? Нормально ли писать str(PROJECT_DIR/'apps')?

+1

Почему вы хотите избежать использования 'str'? –

+0

Я не хочу этого избегать. Я просто спрашиваю, как правильно использовать pathlib. – kharandziuk

+1

re. вы второй вопрос (поскольку он не рассматривается в ответах): да, это нормально. Документация упоминает 'str': [Строковое представление пути - это путь исходной файловой системы (в родной форме, например, с обратной косой чертой под Windows), который вы можете передать любой функции, беря путь к файлу в виде строки.] (Https: //docs.python.org/3/library/pathlib.html#operators) – vaultah

ответ

5

вам нужно добавить путь в виде строки в sys.path:

PROJECT_DIR = Path(__file__).parents[2] 
sys.path.append(
    str(PROJECT_DIR/'apps') 
) 

PROJECT_DIR является экземпляром PosixPath, который имеет все лакомства, как / и parents и т.д., но вы должны преобразовать его в обычную строку, если вы хотите использовать, где-то ожидается строка - например, sys.path.

+0

Вы можете захотеть 'resolve()' Путь, прежде чем добавлять его в sys.path. Это делает его абсолютным - __file__ не всегда является абсолютным. – florisla

+0

@florisla, поскольку это выполняется во время выполнения, в этом нет необходимости (пока вы не перемещаете модули до их импорта). –

-1
project_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)),"..","..") 
sys.path.append(os.path.join(project_dir,"apps")) 
#or maybe you need it at the start of the path 
sys.path.insert(0,os.path.join(project_dir,"apps")) 

Почему вы используете эту странную библиотеку pathlib вместо питонов, которые отлично подходят для путей?

+0

может быть вопросом вкуса - pathlib довольно приятно! –

+0

Это не отвечает на вопрос. – vaultah

+0

Да, его не использует pathlib ... поэтому он отвечает только на вопрос, допустим ли мы (возможно, ошибочно), что OP просто хочет расширить путь ... и pathlib был просто тем, что, по его мнению, ему нужно (или, возможно, нуждается в нем для других причины) –

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