【问题标题】:How do I add a path to PYTHONPATH in virtualenv如何在 virtualenv 中添加 PYTHONPATH 的路径
【发布时间】:2012-05-31 02:54:55
【问题描述】:

我正在尝试向 PYTHONPATH 环境变量添加一个路径,该路径仅在特定的 virtualenv 环境中可见。

我在 virtualenv 命令提示符下尝试了SET PYTHONPATH=...,但这会为整个环境设置变量。

我如何做到这一点?

【问题讨论】:

    标签: python virtualenv


    【解决方案1】:

    using .pth files 通常可以避免使用 PYTHONPATH 做任何事情。只需在您的 virtualenv 的站点包文件夹中放置一个扩展名为 .pth 的文件(任何基本名称都可以),例如lib\python2.7\site-packages,包含您的包的目录的绝对路径作为其唯一内容。

    【讨论】:

    • 不幸的是,这不能作为替代。它附加了路径,所以如果你正在开发它是行不通的。
    • 另外,如果你知道绝对路径,变量的意义何在?
    • 您还可以导航到虚拟环境的站点包文件夹并创建指向 .pth 文件的符号链接,如下所示:ln -s path/to/somfile.pth。当我需要在多个虚拟环境中访问同一个目录时,我发现这很有用
    • 如果venv文件不应该被跟踪,如何跟踪这个文件?
    • 这是在 macOS 上使用 anaconda 和当前版本的 vscode 时唯一对我有用的东西。如果没有这个 .pth 文件,Pylance 将无法识别我的其他模块文件夹。谢谢!
    【解决方案2】:

    如果您使用的是virtualenv,您可能也应该使用virtualenvwrapper,在这种情况下,您可以使用add2virtualenv 命令将路径添加到当前virtualenv 的Python 路径:

    add2virtualenv directory1 directory2 …

    【讨论】:

    • 从 virtualenv 中删除怎么样?
    • 我想添加一个友好的评论,即在共享主机和类似情况下不需要 venv 包装器。在这种情况下,一个 venv 生效,不需要进行额外安装所需的一切。本地情况有所不同,但在服务器/映像上,KISS 非常重要。
    • 我不确定该命令在编写时是如何工作的,但add2virtualenv 没有修改 $PYTHONPATH,而是修改了 sys.path。
    • @ajostergaard:对不起,我应该提供一个来源。如果您查看add2virtualenv 的源代码,您可以看到它正在修改 sys.path。我同意这些文档听起来像是修改了 PYTHONPATH 环境变量,但这似乎是不正确的。 bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/…
    • @ForeverWintr 我已更正 - .pth 文件用于设置 sys.path。 docs.python.org/2/library/site.htmlConfused.com!
    【解决方案3】:

    您也可以尝试将符号链接添加到您的虚拟环境之一。

    例如。 1)激活你的virtualenv 2)运行蟒蛇 3) 导入 sys 并检查 sys.path 4)你会在那里找到python搜索路径。选择其中之一(例如站点包) 5)去那里创建符号链接到你的包,如: ln -s path-to-your-package name-with-which-you'll-be-importing

    这样你应该能够在不激活你的 virtualenv 的情况下导入它。只需尝试:path-to-your-virtualenv-folder/bin/python 并导入你的包。

    【讨论】:

    • 我猜这是因为使用符号链接而不是 .pth 文件而被否决。不过它对我有用,所以,不管怎样。
    【解决方案4】:

    如果你使用的是 virtualenvwrapper,

    $ cd to the parent folder
    $ add2virtualenv  folder_to_add
    

    控制台将显示

    Warning: Converting "folder_to_add" to "/absoutle/path/to/folder_to_add"
    

    就是这样,你应该很高兴

    【讨论】:

      【解决方案5】:
      import sys
      import os
      
      print(str(sys.path))
      
      dir_path = os.path.dirname(os.path.realpath(__file__))
      print("current working dir: %s" % dir_path)
      
      sys.path.insert(0, dir_path)
      

      我强烈建议你使用 virtualenv 和 virtualenvwrapper 以避免路径混乱。

      【讨论】:

      • 如果你想让它适用于任何 python 版本,只需使用普通的旧式字符串格式而不是花哨的 f-string f"... {dir_path}"
      • 感谢您的评论。我修改了使用。旧方法繁琐且特殊,简单的模板系统没有什么花哨的
      • 一切都是相对的 :)
      【解决方案6】:

      正如上面@crimeminister 所建议的那样,您可以使用virtualenvwrapper 然后add2virtualenv 就像@Aneesh Panoli 所建议的那样。如果add2virtualenvpip install virtualenvwrapper 之后不起作用,那么follow instructions in the top voted answer by @chirinosky here。对我有用。

      【讨论】:

        猜你喜欢
        • 2018-09-12
        • 2019-10-06
        • 2013-03-05
        • 2018-02-21
        • 2016-06-03
        • 1970-01-01
        • 2015-06-03
        • 2020-07-27
        • 1970-01-01
        相关资源
        最近更新 更多