`pipenv install -e .` 是什么意思以及如何使用它?
`pipenv install -e .` 是什么意思以及如何使用它?
pipenv
帮助文档写道:\n
\n将本地的setup.py安装到您的虚拟环境/Pipfile中:\n$ pipenv install -e .\n
\n有人可以进一步解释何时以及如何使用命令pipenv install -e .
与setup.py
相关吗?\n根据pipenv
,-e .
指的是可编辑的依赖。然而,我无法理解给出的解释。有人可以解释一下吗?\n编辑:\n例如,我在--user
目录中的pip
中创建了一个简单的发行包mypkg
,即~/mypkg
,使用以下命令:\n
$ pipenv shell (mypkg-x985xH5M) $ python3 setup.py sdist bdist_wheel (mypkg-x985xH5M) $ twine upload --repository-url https://test.pypi.org/legacy/ dist/*
\n并且/mypkg
具有以下文件结构:\n
/mypkg |_ LICENSE |_ README.md |_ setup.py |_ /mypkg | |_ __init__.py | |_ mypkg.py |_ /dist | |_ mypkg-0.0.1rc1.tar.gz | |_ mypkg-0.0.1rc1-py3-none-any.whl |_ /build | |_ /bdist.linux-x86_64 | |_ /lib | |_ /mypkg | |_ __init__.py | |_ mypkg.py |_ /mypkg.egg-info |_ dependency_links.txt |_ entry_points.txt |_ PKG-INFO |_ SOURCES.txt |_ top_level.txt
\n命令$ pipenv install -e .
是什么意思?
`pipenv install -e .` 的作用是将当前项目安装到虚拟环境中,并且以可编辑模式进行安装。这样做的原因是,通常情况下,使用`pip`安装项目时,会将项目文件复制到Python的`site-packages`目录中。这意味着,如果你在本地对项目文件进行修改,那么通过`site-packages`加载这些文件的项目将无法反映出修改后的变化。
使用`-e`参数可以在`site-packages`中创建一个指向项目位置的指针文件,从而将项目的位置添加到Python的模块搜索路径中。这样一来,加载模块时将从磁盘上的位置加载,而不是从`site-packages`中加载,这样每次运行使用该模块的Python项目时,文件的更改都能得到体现。
在运行`pipenv install -e .`时,`.`表示将当前工作目录作为要构建的项目的位置。对于你的示例,在`~/mypkg`目录中运行`pipenv install -e .`将运行`python3 setup.py develop`命令,并在Pipenv维护的Python 3虚拟环境的`site-packages`目录中添加一个`.egg-link`文件。在同一个`site-packages`目录中,一个`easy-install.pth`文件将被更新以添加`~/mypkg`目录的完整路径。这意味着,在Python中使用`import mypkg`将直接从`~/mypkg/mypkg`包中导入代码,而你对`.py`文件的任何更改都将直接生效。
总结一下,`pipenv install -e .`命令将会将依赖从`setup.py`文件的`install_requires`字段添加到`Pipfile.lock`中,并将这些依赖安装到当前的虚拟环境中。而`-e`参数将以可编辑模式进行安装,不会将项目文件复制到`site-packages`中。
需要注意的是,`pipenv`只是`pip`的一个包装器,在这种情况下,它记录直接和间接依赖关系的层次结构,并通过给定相同的锁定文件在其他地方重新创建相同的环境。