【问题标题】:Question about virtual environments, PATH variable and command line关于虚拟环境、PATH 变量和命令行的问题
【发布时间】:2020-11-30 13:14:19
【问题描述】:

如果我将一个 python 包全局安装到我的计算机上,然后将该包的位置添加到我的 PATH 变量中,那么我的命令行可以找到它,而无需每次我想执行时都输入完整的路径。

这在虚拟环境中是如何工作的?例如,我刚刚在项目激活的虚拟环境中使用了pip install ffmpeg。我可以在我的 venv/Lib/site-packages 文件夹中看到它,但我的命令行找不到它。如何执行相当于将ffmpeg 的位置添加到我的 PATH 变量的虚拟环境?

【问题讨论】:

  • 你不要给PATH添加Python包;您将包含包的目录添加到PYTHONPATH。通常,您将软件包安装到已经在解释器默认路径中的目录(尤其是在虚拟环境中),因此您根本不需要修改 PYTHONPATH
  • 它在虚拟环境中的工作方式完全相同。如果您已经激活了虚拟环境,那么您运行的pip 就是您的虚拟环境中的那个,并且它已经被配置为将包安装在您的虚拟环境的python 配置为查找包的目录中。跨度>

标签: python environment-variables development-environment virtual-environment


【解决方案1】:

正如 chepner 在他们上面的评论中提到的,如果你已经激活了你的虚拟环境,这应该已经可以工作了。您可以通过查看模块的 __file__ 来说服自己或仔细检查您从哪个位置运行:

激活虚拟环境之前:

>>> import pip
>>> print(pip.__file__)
C:\Users\...\Anaconda3\lib\site-packages\pip\__init__.py

激活虚拟环境后:

>>> import pip
>>> print(pip.__file__)
C:\Users\...\Documents\Research\...\env\lib\site-packages\pip\__init__.py                                                                                                                             

注意我没有调整PATHpip是从虚拟环境运行的。

还要注意__file__ 不一定为每个模块定义。当__file__ 无法快速检查时,有关选项的更完整视图,请参阅this 答案。

【讨论】:

  • 嗯好的。很高兴知道我可以知道文件从哪里运行。这将有助于我日后进行故障排除。
  • 我在上面尝试了你的小测试,我发现 pip 正在从相同的确切位置加载。
  • 让它工作。再次感谢你。问题是我没有在我的激活命令前面加上.,正如在这个答案中找到的那样:stackoverflow.com/questions/10450992/…
  • @rocksNwaves,您可能天真地认为环境变量是全局的。它们在类 UNIX 系统上不是全局的。使用.source shell 命令的全部原因是确保脚本所做的任何更改都是在当前shell 的上下文中完成的,而不是在子shell 的上下文中;即,一个子进程。
猜你喜欢
  • 1970-01-01
  • 2019-08-21
  • 2015-12-12
  • 2021-10-03
  • 1970-01-01
  • 2023-03-12
  • 2018-11-25
  • 2021-04-24
  • 2022-01-13
相关资源
最近更新 更多