我在不使用virtualenv library的情况下创建了"virtual"环境。

我有这个结构。

./default_env
├── .venv
├── main.py

在文件夹.venv中,我安装了库

要在.venv中安装软件包,我只需运行即可

>>> pip install --target=path\to\.venv package_to_install

这没关系,工作正常。

但是我的问题是当我尝试运行python时。
我不想运行使用全局site-packages的python,我希望它指向我的.venv文件夹。我已经阅读了有关USER_SITE的内容,但我无法正确理解如何更改它并使用它。

当我运行python main.py时,我收到一个错误(因为我已清除所有已安装的库)。但是,我在.venv中安装了请求及其依赖包。

所以我想了解如何运行

>>> python main.py 

(带参数,或改变某些东西......)但要告诉python "site-packages"要指向.venv文件夹。

这是我的main.py脚本。

import requests
def main():
    try:
        import requests
        r = requests.get('https://api.github.com/user')
        print("get request sent")
    except:
        print("get request not sent")

if __name__ == "__main__":
    main()

因此,当我运行它时,我明白了

λ python main.py
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

因为请求未安装在全局site-packages中。

分析解答

您需要使用PYTHONPATH环境变量或修改sys.path来设置python路径。

# This needs to come before any other imports
import sys
sys.path.insert(0, "path/to/your/venv")

您还可以删除其他路径以包含您自己的路径。 sys.path只是一个list

但是为什么不使用virtualenv呢? venv package现在是标准library的一部分。