使用"pip-install-e"无法进行开发安装除非我删除"pyproject.toml



我有以下情况,pip install -e .不会构建develop版本,除非我删除了不包含打包信息但包含黑色配置的pyproject.toml

有人知道该怎么做才能得到develop版本吗。

我的pyproject.toml看起来像这样:

# Source https://github.com/psf/black#configuration-format
[tool.black]
line-length = 100
target-version = ['py38']
exclude = '''
'''

setup.py

from setuptools import find_namespace_packages
from setuptools import setup
setup(
name="webservice",
packages=find_packages(),
version="0.1.0",
description="description",
author="Author",
license="License",
)

用这两个文件运行pip install -e .。。。

(webservice_tool)pk@LAP1:~/webservice_tool$ pip install -e .
Obtaining file:///home/pk/webservice_tool
Installing build dependencies ... done
Checking if build backend supports build_editable ... done
Getting requirements to build editable ... done
Preparing editable metadata (pyproject.toml) ... done
Building wheels for collected packages: webservice
Building editable for webservice (pyproject.toml) ... done
Created wheel for webservice: filename=webservice-0.1.0-0.editable-py3-none-any.whl size=4070 sha256=dcb7c034ba437503d1059fe9370ccafbda144cd19f3e5d92340a63a7da396422
Stored in directory: /tmp/pip-ephem-wheel-cache-6iqiqbob/wheels/e6/b5/ba/40d8c3d66df94ee2ae46e181034e0c3c47132784db53284d0b
Successfully built webservice
Installing collected packages: webservice
Successfully installed webservice-0.1.0

我删除了pyproject.toml,然后才显示Running setup.py develop

(webservice_tool) pk@LAP1:~/webservice_tool$ pip install -e .
Obtaining file:///home/pk/webservice_tool
Preparing metadata (setup.py) ... done
Installing collected packages: webservice
Attempting uninstall: webservice
Found existing installation: webservice 0.1.0
Uninstalling webservice-0.1.0:
Successfully uninstalled webservice-0.1.0
Running setup.py develop for webservice
Successfully installed webservice-0.1.0

从我的conda-env中选择的一些包的版本,在wsl2 中运行

packaging                 21.3               pyhd3eb1b0_0  
pip                       22.1.2           py38h06a4308_0  
python                    3.8.13               h12debd9_0  
setuptools                61.2.0           py38h06a4308_0  

文件夹结构

|-- data_utils
|   |-- clean_cache.py
|   `-- advanced_utils.py
|-- deployment
|   |-- base_deployment
|   |   |-- auth-proxy.yaml
|   |   |-- kustomization.yaml
|   |   |-- webapi.yaml
|   |   `-- webui.yaml
|   `-- mysql_from_helm
|       |-- mysql-from-helm.yaml
|       `-- mysql-kustomization.yaml
|-- docker-compose.yml
|-- Dockerfile
|-- environment.yml
|-- live_api
|   |-- definitions.json
|   |-- __init__.py
|   `-- live_api.py
|-- params.py
|-- pyproject.toml
|-- setup.py
|-- shared_helpers
|   |-- data_cleaning.py
|   |-- handle_time.py
|   |-- __init__.py
|   |-- plot_timesequence.py
|   |-- read_samples.py
|   `-- save_samples.py
|-- setup.py
|-- util.py
|-- webtool
|   |-- clean_data
|   |   |-- clean_data.py
|   |   `-- __init__.py
|   |-- evaluation
|   |   |-- draw_figures.py
|   |   |-- __init__.py
|   |   `-- webtool_metrics.py
|   |-- __init__.py
|   |-- preprocess
|   |   |-- __init__.py
|   |   `-- preprocess.py
|   |-- ui
|   |   |-- __init__.py
|   |   `-- create_ui.py
|   `-- util
|       |-- data_input.py
|       |-- data_redefinitions.py
|       `-- __init__.py
|-- webtool.egg-info
|   |-- dependency_links.txt
|   |-- entry_points.txt
|   |-- PKG-INFO
|   |-- SOURCES.txt
|   `-- top_level.txt
`-- webtool_tests
|-- clean_data
|   `-- test_clean_data.py
|-- evaluation
|   `-- test_draw_figures.py
|-- preprocess
|   `-- test_preprocess.py
`-- util
|-- test_data_input.py
`-- test_data_redefinitions.py

这两个都是开发安装。这里pip输出的不同之处在于,pyproject.toml文件的存在(或不存在(会导致pip使用构建后端挂钩(或不使用(。从…起PEP 517:

如果pyproject.toml文件不存在。。。源树没有使用这个规范,工具应该恢复到运行setup.py的遗留行为

您也可以通过pip命令行选项控制它:

$ pip install --help | grep pep
--use-pep517                Use PEP 517 for building source distributions
(use --no-use-pep517 to force legacy behaviour).

不同的是,对于PEP 517风格的构建,pip正在设置venv并新安装setuptools,用于后台包构建(请参阅日志中的"安装构建依赖项…完成">(,而直接调用python setup.py develop,只假设用于执行setup.py的Python运行时中已经安装了适当的setuptools版本。这里的要点是,使用PEP517风格的构建系统可以让项目指定所需的setuptools版本(或者,实际上,完全使用其他构建系统(。

最终结果将是相同的——放置在站点包中的.pth路径配置文件将公开源目录作为开发安装。

由于util.py不包含在任何包中,因此要在开发安装中获取它(而不是仅从当前工作目录导入(,您还需要在setup调用中将其与find_packages()一起列出:

# in setup.py 
from setuptools import setup
setup(
name="webservice",
version="0.1.0",
packages=find_packages(),
py_modules=["util"],  # <--- here
...
)

正如其他人已经说过的,这两种安装都是可编辑的。导入行为的差异是由可编辑安装在后台执行的方式引起的:

  • 在传统模式下,您的项目目录只需添加到sys.path
    (这就是import util工作的原因(

  • 在PEP 660模式中,setuptools可以根据配置选项和您的项目结构选择不同的技术(自64.0.0版本起支持(:

    setuptools努力在允许用户看到正在编辑的项目文件的效果,同时仍试图保持可编辑安装与常规安装尽可能相似之间找到平衡。

    您的项目有一个平面布局,因此setuptools安装一个";导入查找器";而是将导入限制为仅包含在分发包中的包和模块。

根据setup.py,您不会在项目中指定任何模块。您需要在setup()函数的py_modules参数中列出它们
您还可以将所有项目配置移动到pyproject.toml文件中。

相关内容

  • 没有找到相关文章

最新更新