如何将带冒号的目录添加到PYTHONPATH?

8 投票
6 回答
16327 浏览
提问于 2025-04-11 18:16

问题很简单:

我想用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解释器的源代码中看到这一点。

唯一的解决办法,正如很多人提到的,是使用符号链接或者其他方法,让你可以为你的目录提供一个不带冒号的名称。

撰写回答