如何将带冒号的目录添加到PYTHONPATH?
问题很简单:
我想用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能做到这一点吗?如果可以的话,需要什么样的语法?
6 个回答
2
你只没试这个:
export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com\:3344/"
问题在于,如果没有引号,转义字符会被直接解释,变成字符串中的一个字面意思的“:”。但是这个“:”后面还需要被处理。
$ echo "foo:"
foo:
$ echo \:foo
:foo
$ echo ":foo"
:foo
$ echo "\:foo"
\:foo
我不能保证这能解决你的python路径问题,但它可以把反斜杠“\”放进字符串里。
3
提问者想把一个带端口号的URL添加到文件路径列表中。但这种URL并不是文件路径,所以Python根本找不到那个位置的Python文件。把带端口号的URL放进PYTHONPATH是没有意义的。
不过,有些人可能会因为以下原因而看到这个问题:
在Windows系统中,路径前面会有驱动器标识符,后面跟着一个冒号,比如 C:/Python27/lib
。在Windows的bash中,你可以用分号把多个路径添加到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']
11
问题不在于bash,它应该能正确设置你的环境变量,并且包含:
这个字符。
真正的问题在于Python对PYTHONPATH
变量的解析。根据PATH
变量的例子,似乎没有转义字符,所以它无法把:
解释成其他的意思,只能当作分隔符。你可以在Python解释器的源代码中看到这一点。
唯一的解决办法,正如很多人提到的,是使用符号链接或者其他方法,让你可以为你的目录提供一个不带冒号的名称。