问题很简单:
使用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做这个? 如果是这样,需要什么语法?
答案 0 :(得分:8)
问题不在于bash。它应该正确设置您的环境变量,并使用:
字符完成。
相反,问题在于Python解析PYTHONPATH
变量。按照PATH
variable设置的示例,似乎根本没有转义字符,因此无法将:
解释为除分隔符之外的其他内容。您可以在Python interpreter source code。
正如几个人已经提到的,唯一的解决方案是使用符号链接或其他东西来允许你为目录提供无冒号的名称。
答案 1 :(得分:2)
你只有一个没试过:
export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com\:3344/"
问题是没有引号,直接解释转义,并在字符串中转换为文字“:”。但是“:”需要稍后进行评估。
$ echo "foo:"
foo:
$ echo \:foo
:foo
$ echo ":foo"
:foo
$ echo "\:foo"
\:foo
我无法保证这会修复你的python-path问题,但它会将\ literal放入字符串中。
答案 2 :(得分:1)
我不知道你想要的是否是直接可能的,但是如果你使用的是linux文件系统,那么解决方法就是为你的“coloned”目录创建一个符号链接,并将这个符号链接添加到你的PYTHONPATH:
ln -s /home/shane/mywebsite.com\:3344 /home/shane/mywebsite.3344
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.3344
答案 3 :(得分:1)
OP正在尝试将带有端口号的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']
答案 4 :(得分:0)
符号链接hack可能是唯一可行的选项,除非有一些启发式方法来确定如何处理PYTHONPATH中的冒号。