【问题标题】:Why Does Using the Python-YQL Module Change sys.path[0] to sys.path[1]?为什么使用 Python-YQL 模块会将 sys.path[0] 更改为 sys.path[1]?
【发布时间】:2012-01-09 22:44:39
【问题描述】:

当我将python-yql (Yahoo Query Language) 模块导入到我的 Python 项目中时,代表调用 Python 脚本的本地目录路径的字符串(通常存储在 sys.path[0] 中)更改为 sys.path[1] . sys.path[0] 被替换为 python-yql 模块所在位置的目录。 sys.path[0] 更改为 sys.path[1] 是否有原因仅仅是因为正在使用 python-yql 模块?

【问题讨论】:

    标签: python directory yql sys


    【解决方案1】:

    yql/__init.py 你会发现这一行:

    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../'))
    

    这是在sys.path前面插入yql路径。

    如果yql egg 文件在你的 PYTHONPATH 中,那么你可以注释掉或删除这个 sys.path.insert 语句,这个包应该仍然可以工作。

    【讨论】:

    • 感谢您的帮助!是否会注释掉 sys.path.insert(0, os.path.join(os.path.dirname(file), '../'))程序并且我将本地目录引用为 sys.path[0],它无法正常运行,因为不能假设另一台机器也在使用修改后的 init.py 文件运行?您是否建议仅使用 sys.path[1] 而不是注释掉该行以保持兼容性?
    • 您可能想要求 python-yql 的开发人员删除这一行,因为这不是必需的(我认为)并且是相当令人惊讶的行为,因为 the docs say, "path[0].. . 是包含用于调用 Python 解释器的脚本的目录。”或者,您可以使用os.path.split(os.path.realpath(__file__))[0] 而不是sys.path[0]
    • 这似乎是一个有效的观点。 file 在 os.path.split(os.path.realpath(file))[0] 中代表什么?
    • __file__ 是一个predefined attribute,Python 将其设置为当前文件的路径名。 (如果您点击上面的链接,请搜索“__file__”)。
    • 知道这一点很有用!谢谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多