Python 关于虚拟环境、路径变量和命令行的问题

Python 关于虚拟环境、路径变量和命令行的问题,python,environment-variables,development-environment,virtual-environment,Python,Environment Variables,Development Environment,Virtual Environment,如果我全局地在我的计算机上安装一个python包,然后将该包的位置添加到我的PATH变量中,那么我的命令行就可以找到它,而无需每次执行时都键入完整的路径 这在虚拟环境中是如何工作的?例如,我刚刚在项目激活的虚拟环境中使用了pip安装ffmpeg。我可以在我的venv/Lib/site packages文件夹中看到它,但我的命令行找不到它。如何将虚拟环境等效于将ffmpeg的位置添加到我的路径变量中?正如chepner在上面的评论中提到的,如果您已经激活了虚拟环境,这应该已经起作用了。您可以通过查

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


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

正如chepner在上面的评论中提到的,如果您已经激活了虚拟环境,这应该已经起作用了。您可以通过查看模块的
\uuuuuu文件\uuuuuu
来说服自己或再次检查运行的位置:

激活虚拟环境之前:

>>> 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                                                                                                                             
激活虚拟环境后:

>>> 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                                                                                                                             
请注意,我没有调整
路径
,并且正在从虚拟环境运行
pip


还请注意,
\uuuuuuuuuuuuuuuuu文件
不一定为每个模块定义。有关当
\uuuu file\uuuu
无法进行快速检查时选项的更完整视图,请参阅答案。

您不需要将Python包添加到
路径
;将包含包的目录添加到
PYTHONPATH
。通常,您将软件包安装到已在解释器默认路径中的目录(特别是在虚拟环境中),因此根本不需要修改
PYTHONPATH
。它在虚拟环境中的工作原理完全相同。如果您已经激活了虚拟环境,那么您运行的
pip
就是您的虚拟环境中的一个,并且它已经配置为将包安装在一个目录中。您的虚拟环境的
python
配置为查找包。hmm好的。很高兴知道,我可以从文件运行的位置判断。这将有助于我在将来进行故障排除。我尝试了上面的小测试,我发现pip正在从同一个确切位置加载。它开始工作了。再次感谢你。问题是我没有用
预先编写激活命令,正如这里的答案所示:@rocksNwaves,您可能天真地认为env vars是全局的。它们在类UNIX系统上不是全局的。使用
source
shell命令的全部原因是为了确保脚本所做的任何更改都是在当前shell的上下文中完成的,而不是在子shell中完成的;i、 例如,子进程。