pip install -e .将正在开发的python包安装到虚拟环境中,以便测试和调试。 如果该包有依赖项,pip会自动安装依赖项
1. pip install
的基础
pip install
是Python包管理工具pip
用来安装Python包的命令。通常,我们使用pip install package_name
来安装从Python Package Index (PyPI) 下载的包。然而,如果我们在开发一个Python包,可以在本地安装它以便调试和测试。
2. -e
参数:editable模式
-e
是editable
的缩写,表示“可编辑”模式。在这种模式下,包会以“符号链接”(symlink)的形式安装,而不是直接复制文件。这意味着任何对源代码的修改都能立即在环境中生效,而不需要重新安装包。
可编辑安装的好处:
- 方便开发:每次代码改动无需重新安装包,改动会立即反映在环境中。
- 测试和调试更灵活:可以随时在当前环境中测试新的代码,特别适合需要频繁调整代码的开发过程。
3. .
参数:指定当前目录
.
表示当前目录,pip install -e .
意味着在当前目录安装包。通常,这个目录需要包含一个**setup.py
文件或pyproject.toml
**文件,这些文件定义了包的元数据和依赖项。
4. setup.py
和pyproject.toml
为了使pip install -e .
正常工作,项目的根目录需要包含以下文件之一:
-
setup.py
:这是一个Python脚本,用于定义包的名称、版本、作者、依赖项等。setup.py
通常包含setuptools.setup()
调用来配置这些信息。
示例setup.py
文件:from setuptools import setup, find_packages setup( name='my_project', version='0.1', packages=find_packages(), install_requires=[ 'numpy', # 在此列出依赖项 'scipy', ], )
-
pyproject.toml
:这是一个较新的包配置文件,特别是在使用PEP 517构建系统时。在这里你可以定义包的元数据和依赖项,通常配合setuptools
或poetry
等构建工具使用。
关于 Legacy editable install
的警告
这是关于 pip
未来版本中不再支持使用 setup.py develop
进行可编辑安装的弃用警告。它建议你可以改用 pyproject.toml
文件或使用 --use-pep517
标志进行安装。
解决方法:
-
添加
pyproject.toml
文件:
根据警告信息,建议在你的项目根目录添加一个pyproject.toml
文件,内容大致如下:[build-system] requires = ["setuptools>=64", "wheel"] build-backend = "setuptools.build_meta"
-
使用
--use-pep517
选项:
如果你不打算修改项目结构,可以在安装命令中添加--use-pep517
,这会使用新的构建系统规范:pip install -e . --use-pep517
使用pip install -e .
的典型场景
-
开发Python包:在项目开发期间,使用
pip install -e .
让包在开发过程中以“可编辑”的方式安装。这样,测试、调试和开发的改动都能立即生效。 -
安装带有依赖项的包:如果项目在
setup.py
中定义了依赖项(如install_requires=['numpy', 'scipy']
),pip install -e .
会自动安装这些依赖项。这样,你无需手动安装所有依赖。 -
协作开发:在团队协作开发中,其他开发人员可以通过
pip install -e .
安装包的本地版本,而不用发布到PyPI。
详细的工作流程示例
假设你有以下文件结构的项目:
my_project/
├── setup.py
├── my_module/
│ ├── __init__.py
│ └── my_script.py
└── tests/
└── test_my_script.py
步骤:
-
在
my_project
目录下,创建setup.py
文件(如下):from setuptools import setup, find_packages setup( name='my_project', version='0.1', packages=find_packages(), install_requires=[ 'numpy', # 列出项目依赖的包 ], entry_points={ 'console_scripts': [ 'my_command = my_module.my_script:main', # 可选,用于命令行工具 ], }, )
-
在
my_project
目录中运行以下命令进行安装:pip install -e .
这样,
my_project
包就会安装到Python环境中。 -
验证安装:
你可以在Python中导入my_project
模块,并验证它是否工作:import my_module
-
立即生效:
由于是“可编辑”的方式安装,如果你编辑了my_module/my_script.py
中的代码,改动将会立即生效,你可以在项目中测试,不需要重新安装。
总结
pip install -e .
的核心优势在于简化了开发过程。它允许你在项目目录中随意编辑代码,同时所有改动会自动反映到安装环境中,非常适合开发周期中频繁修改代码的场景。