【发布时间】:2011-04-21 23:47:20
【问题描述】:
我有一个包含嵌入式 Python 2.6 解释器的程序。当我调用解释器时,我调用 PySys_SetPath() 将解释器的导入路径设置为安装在包含我的 Python 脚本文件的可执行文件旁边的子目录......像这样:
PySys_SetPath("/path/to/my/program/scripts/type1:/path/to/my/program/scripts/type2");
(除了路径字符串是根据我的程序可执行文件的当前位置动态生成的,而不是像上面的例子那样硬编码)
这很好用...除非聪明的用户决定将我的程序安装在名称中带有冒号的文件夹下。在这种情况下,我的 PySys_SetPath() 命令最终看起来像这样(注意存在一个名为“path:to”的文件夹):
PySys_SetPath("/path:to/my/program/scripts/type1:/path:to/my/program/scripts/type2");
... 这会破坏我所有的 Python 脚本,因为现在 Python 在“/path”和“to/my/program/scripts/type1”中查找脚本文件,而不是在“/path:to/myprogram/ scripts/type1",因此所有 import 语句都不起作用。
我的问题是,除了告诉用户在其文件夹名称中避免使用冒号之外,是否有任何解决此问题的方法?
我查看了 Python/sysmodule.c 中的 makepathobject() 函数,它似乎不支持任何类型的引用或转义来处理文字冒号......但也许我遗漏了一些细微差别。
【问题讨论】:
-
你试过用反斜杠转义冒号吗?所以像
PySys_SetPath(r"/path\:to/my/program/scripts/type1:/path\:to/my/program/scripts/type2");.
标签: python path escaping colon