Python setup.py 开发与安装
- 2025-01-17 09:23:00
- admin 原创
- 137
问题描述:
setup.py 中的两个选项develop
让install
我感到困惑。根据此站点,使用develop
会创建指向 site-packages 目录的特殊链接。
人们建议我使用python setup.py install
全新安装,并对python setup.py develop
安装文件进行任何更改。
有人可以解释一下这些命令的用法吗?
解决方案 1:
python setup.py install
用于安装您不打算自己开发/修改/调试的软件包(通常是第三方软件包)。
对于您自己的内容,您希望首先安装您的包,然后能够频繁地编辑代码,而不必每次都重新安装该包 - 这正是它所做python setup.py develop
的:它以一种允许您在将包安装到(虚拟)环境后方便地编辑代码的方式安装包(通常只是一个源文件夹),并使更改立即生效。
注意:强烈建议使用pip install .
(常规安装)和pip install -e .
(开发者安装)来安装包,因为setup.py
直接调用会对许多依赖项执行错误的操作,例如拉取预发布版本和不兼容的包版本,或者使包难以卸载pip
。
更新:
develop
最新方法的对应内容如下python -m build
(按照):
解决方案 2:
根据文档。develop
将不会安装包,但它会.egg-link
在部署目录中创建一个并返回到项目源代码目录。
因此,它就像安装一样,但不是复制到,site-packages
而是添加符号链接(.egg-link
充当多平台符号链接)。
这样,您就可以编辑源代码并直接查看更改,而无需每次进行小更改时都重新安装。当您是该项目的开发人员时,这很有用,因此得名develop
。如果您只是安装其他人的软件包,则应该使用install
解决方案 3:
使用该方法时人们可能会发现另一个有用的功能develop
是--user
无需 sudo 即可安装。例如:
python setup.py develop --user
而不是
sudo python setup.py develop
解决方案 4:
develop
`.egg-link在 中创建一个
site-packages。如果源文件被修改,它们将在下次加载。(
.egg-link已解析并包含在 中
sys.path`。)
install
创建一个egg
-zip 文件site-packages
并托管一份副本。
例子:
touch demo_src.py
python -c "import setuptools; setuptools.setup(name='demo_src', py_modules=['demo_src'])" develop --user
# => */site-packages/demo-src.egg-link
python -c "import setuptools; setuptools.setup(name='demo_src', py_modules=['demo_src'])" install --user
# => */site-packages/demo_src-0.0.0-py3.12.egg
python -c "import sys; print(sys.path)"
# [..., '*/site-packages/demo_src-0.0.0-py3.12.egg', <current dir>, '*/site-packages']
顺便说一句,pip install -e
运行setup.py develop
(什么时候-e,--editable选项在pip install中有用?)
扫码咨询,免费领取项目管理大礼包!