Как добавить каталог с двоеточием в PYTHONPATH? - PullRequest
5 голосов
/ 17 ноября 2008

Проблема проста:

Используя bash, я хочу добавить каталог в свою PYTHONPATH для простоты выполнения скрипта. К сожалению, каталог, который я хочу использовать, содержит: в нем. Поэтому я пробую каждый из следующих

export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com:3344/
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com\:3344/
export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com:3344/"

Ни одна из этих работ. Каждый раз путь создается в виде двух отдельных каталогов на пути в python. Мой вопрос, возможно ли сделать это для Bash? Если да, какой синтаксис требуется?

Ответы [ 5 ]

8 голосов
/ 17 ноября 2008

Проблема не в bash. Должна быть правильная установка переменной окружения с символом :.

Проблема вместо этого заключается в синтаксическом анализе Python переменной PYTHONPATH. Следуя примеру, установленному переменной PATH , кажется, что escape-символа вообще нет, поэтому нет способа заставить его интерпретировать : как нечто отличное от разделителя. Вы можете убедиться в этом в исходном коде интерпретатора Python .

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

2 голосов
/ 17 ноября 2008

Есть только один, который вы не пробовали:

export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com\:3344/"

Проблема заключается в отсутствии кавычек, экранирование интерпретируется напрямую и преобразуется в литерал «:» в строке. Но «:» необходимо оценить позже.

$ echo "foo:" 
foo:
$ echo \:foo
:foo
$ echo ":foo"
:foo
$ echo "\:foo"
\:foo

Я не могу гарантировать, что это исправит вашу проблему с python-path, но он вставит \ literal в строку.

1 голос
/ 11 января 2017

ОП пытался добавить URL-адрес с номером порта в список путей к файлам. Этот тип URL не является путем к файлу, поэтому python никогда не найдет файл python в этом месте. Не имеет смысла помещать URL-адрес с номером порта в PYTHONPATH.

Несмотря на это, некоторые люди могут оказаться на этом вопросе из-за следующего:

В Windows пути обозначений дисков имеют двоеточие, например C:/Python27/lib. В bash для Windows вы можете добавить несколько путей к PYTHONPATH с помощью точки с запятой, например:

$ export PYTHONPATH="C:\MYPATH1;C:\MYPATH2"
$ python -i
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\\MYPATH1', 'C:\\MYPATH2', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\Pythonwin']
1 голос
/ 17 ноября 2008

Я не знаю, возможно ли то, что вы хотите, напрямую, но обходной путь, если вы используете файловую систему linux, заключается в том, чтобы создать символическую ссылку на каталог «coloned» и добавить эту символическую ссылку в вашу PYTHONPATH следующим образом: *

ln -s /home/shane/mywebsite.com\:3344 /home/shane/mywebsite.3344
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.3344
0 голосов
/ 17 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...