来自JavaScript,我对NPM很熟悉。
您可以在那里全局安装软件包(通过使用-g标志),也可以在项目本地安装软件包。 在Python中,它们具有这些虚拟环境。 我仍然不确定为什么需要它们。我知道这是为了在一台计算机上具有不同版本的相同软件包。
是因为Python没有本地项目安装的概念吗?
所有软件包安装都已全局安装,因此无法解决。在我看来就是那样... 所以他们有虚拟环境吗?
我在那里吗?
答案 0 :(得分:4)
虚拟环境使您可以按项目封装依赖项。
Python没有等效的node_modules
。当您使用pip
安装某些程序时,它将转到您的 site-packages 文件夹。要找出该文件夹,您可以运行python -m site
,它将打印出要在其中搜索软件包的文件夹。
Fedora 29上的示例:
➜ ~ python -m site
sys.path = [
'/home/geckos',
'/usr/lib/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib/python2.7/site-packages',
]
USER_BASE: '/home/geckos/.local' (exists)
USER_SITE: '/home/geckos/.local/lib/python2.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
如果您不使用虚拟环境,则最终可能会导致软件包与操作系统python软件包并排安装,这就是危险所在。程序包可能会被覆盖,事情很快就会变得混乱。例如,您使用pip安装Flask,然后尝试使用package-manager从中安装Jinja2,现在您删除Jinja2,并破坏Flask,或者更新系统,Jinja2得到了更新,但Flask没有。甚至更简单,您可以使用软件包管理器安装某些东西,然后使用pip删除,知道软件包管理器处于损坏状态。
因此,我们始终使用虚拟环境,甚至按项目分开使用虚拟环境。
没有什么可以阻止您将虚拟环境维护在与项目相同的文件夹中。这样,您将拥有与node_modules相同的 felling 。您可以使用
创建它 virtualenv <SOME_FOLDER>
for python 2
要么
python3 -m venv <SOME_FOLDER>
用于python 3
如果您将虚拟环境保留为项目的子文件夹,那么我通常会打电话给env
或venv
其他选择则将所有内容保留在您家中的同一文件夹中,我一直在使用~/.venv/<PROJECT>
最后,除了纯pip
,我还有其他选择。 Pipenv是可自动为您管理虚拟环境的工具。感觉更接近 yarn ,并具有更多功能
仅在项目文件夹中的pipenv --tree
或pipenv --two
上为项目创建虚拟环境。它将创建和管理虚拟环境,并将依存关系写入Pipenv文件。它还支持开发包,我真的认为值得尝试。这是文档:https://docs.pipenv.org/en/latest/
我希望这会有所帮助
答案 1 :(得分:1)