【问题标题】:How do I add a directory with a colon to PYTHONPATH?如何将带有冒号的目录添加到 PYTHONPATH?
【发布时间】:2008-11-17 09:46:19
【问题描述】:

问题很简单:

使用 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 做到这一点? 如果有,需要什么语法?

【问题讨论】:

  • 为什么不重命名您的文件夹,以便将“:”替换为其他内容?还是完全删除?
  • @OJ:很好的问题!我可以对此发表评论。
  • @S.Lott 具有讽刺意味的是 :) 是您要求对 cme​​ts 进行投票吗?

标签: python bash shell


【解决方案1】:

问题不在于 bash。它应该正确设置您的环境变量,并使用 : 字符完成。

问题在于 Python 对 PYTHONPATH 变量的解析。按照PATH variable 设置的示例,似乎根本没有转义字符,因此无法将: 解释为分隔符以外的其他内容。您可以在Python interpreter source code 中亲自查看。

正如一些人已经提到的那样,唯一的解决方案是使用符号链接或其他东西来允许您为目录提供无冒号的名称。

【讨论】:

  • 所以这是Python中的一个bug:无法转义的特殊字符。
  • @Harleqin:所以你不知道什么是错误:一些不像规范所说的那样工作。
【解决方案2】:

只有一个你没有尝试过:

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

问题是没有引号,转义被直接解释,并转换成字符串中的文字“:”。但是“:”需要稍后评估。

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

我不能保证这会解决您的 python 路径问题,但它会将 \ 文字放入字符串中。

【讨论】:

    【解决方案3】:

    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】:

      我不知道您想要的是否直接可行,但如果您使用的是 linux 文件系统,一种解决方法是创建一个指向“coloned”目录的符号链接,并将此符号链接添加到您的 PYTHONPATH 中,如下所示:

      ln -s /home/shane/mywebsite.com\:3344 /home/shane/mywebsite.3344
      export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.3344
      

      【讨论】:

        【解决方案5】:

        符号链接破解可能是唯一可行的选择,除非有一些启发式方法来确定如何处理 PYTHONPATH 中的冒号。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-13
          • 2011-03-25
          • 1970-01-01
          • 2012-08-31
          • 2014-03-05
          相关资源
          最近更新 更多