ntv.js框架(第三章) - 机顶盒HTML和CSS编写注意事项

本文详细介绍了机顶盒浏览器显示分辨率特点、安全显示区域设定、支持的CSS样式属性、不支持的CSS样式列表、以及HTML标签使用注意事项,并提供了应用代码样例,旨在指导开发者进行界面设计。

UI设计:

      机顶盒的输出设备为电视机,电视机的图像重现率比计算机的显示器小,靠近边缘部分的文字与图像可能会在电视机中无法看到,所以在进行应用界面设计时,文字与图像尽量设计在屏幕中间的部位。为了保证页面上的内容可以完全显示在电视机上,需要设置一个安全显示区域。各种型号的电视机,其重现率都是不同的,因此对于安全显示区没有固定的大小,推荐的安全显示区域分辨率为1120×620,即左右各保留80,上下各保留50。

1. 机顶盒浏览器的显示分辨率是1280×720像素。

2. 设计图 上下各保留25px,左右各保留40px的距离,不再安全显示距离的范围内摆放元素。


CSS样式:

       机顶盒支持基础的CSS样式属性和派生选择器,例如:margin, padding, float, position, line-height等,各厂商对于基础样式属性的渲染差异性也不大。

不支持的CSS样式列表(这里只列举在PC平台浏览器上常用的CSS属性)

1. 伪类,例如: ":active", ":focus", ":visited"等。机顶盒上使用的是遥控器,所以鼠标悬停之类的行为无效。

2. min-width/height, max-width/height 设置元素最大/最小宽带/高度的属性,无效。

3. display: inline, list-item, table等,不建议使用。各厂商中间件渲染差异非常大。

4. z-index,无效。


CSS3和动画效果:

      在支持上各厂商偏差较大,由于机顶盒属弱终端类型(硬件资源弱),内置支持的动画功能有限,而且也不是运营商目前强制要求支持的功能。同样就目前网内的应用设计要求上来讲,使用到CSS3及动画的应用非常少,大多停留在实验室演示阶段。


HTML标签:

1. 避免嵌套层级过深,嵌套层级越深CSS渲染偏差越大,元素位置越难控制。

2. 使用 绝对定位来布局(div + position: absolute;) ,因为机顶盒有固定的分辨率。在PC平台浏览器上不建议使用绝对定位的原因是因为多分辨率,但这种问题不存在于机顶盒上,而且使用绝对定位来布局复杂结构时更容易控制。

3. 横竖列表形式的布局使用 ul+li+float 而不推荐使用 table,因为 table 内元素样式不容易控制。 

4. 在无 <input />标签的页面不使用 <a /> 标签,因为在机顶盒上浏览器会将 a 标签定义为可通过遥控器选择的元素。(这样会出现很多问题,后续章节说明原因)


应用代码样例:

应用界面:

111303_F0G3_214583.jpg

HTML代码:

<!DOCTYPE html>
<html>
 <head>
  <title> 商品首页 </title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="page-view-size" content="1280*720">
  <link rel="stylesheet" href="../ntv/css/ntv.css">
  <link rel="stylesheet" href="../css/app.css">
 </head>
 <body>
 <div class="container product-index">
    
    <section class="layout-top-bar">
      <div class="pos-abs logo"><img src="../images/common/logo.png" alt=""></div>
      <div class="pos-abs banner"><img src="../images/common/banner.png" alt=""></div>
      <div class="pos-abs nav-bar">
        <ul>
          <li><img src="../images/common/nav_item1.png" alt="11" name="sale.html"></li>
          <li><img src="../images/common/nav_item6.png" alt="12" name="product-index.html"></li>
          <li><img src="../images/common/nav_item2.png" alt="13" name="cart.html"></li>
          <li><img src="../images/common/nav_item3.png" alt="14" name=""></li>
          <li><img src="../images/common/nav_item4.png" alt="15" name=""></li>
          <li><img src="../images/common/nav_item5.png" alt="16" name="help.html"></li>
        </ul>
        <div class="float-clear"></div>
      </div>
    </section>
    
    <section class="layout-content">
      <div class="pos-abs content">
        <div class="category">
          <div class="pre-btn"><img src="../images/product/pre_btn.png" alt=""></div>
          <ul>
            <li><img src="../images/test/category1.png"></li>
            <li><img src="../images/test/category2.png"></li>
            <li><img src="../images/test/category3.png"></li>
            <li><img src="../images/test/category4.png"></li>
            <li><img src="../images/test/category5.png"></li>
          </ul>
          <div class="pos-rel next-btn"><img src="../images/product/next_btn.png" alt=""></div>
          <div class="float-clear"></div>
        </div>
        
        <div class="line"></div>
        
        <div class="ad">
          <ul>
            <li><img src="../images/test/product_index_ad1.png"></li>
            <li><img src="../images/test/product_index_ad2.png"></li>
            <li><img src="../images/test/product_index_ad3.png"></li>
          </ul>
          <div class="float-clear"></div>
        </div>
      </div>
    </section>
    
    
    <!-- 页面焦点元素 start -->
    <section class="layout-focus">
      <div class="pos-abs category-f">
        <ul>
          <li><img src="../images/product/category_item.png" alt="21" name="product-list.html"></li>
          <li><img src="../images/product/category_item.png" alt="22" name="product-list.html"></li>
          <li><img src="../images/product/category_item.png" alt="23" name="product-list.html"></li>
          <li><img src="../images/product/category_item.png" alt="24" name="product-list.html"></li>
          <li><img src="../images/product/category_item.png" alt="25,26" name="product-list.html"></li>
        </ul>
        <div class="float-clear"></div>
      </div>
      
      <div class="pos-abs ad-f">
        <ul>
          <li><img src="../images/product/ad_item.png" alt="31,32"></li>
          <li><img src="../images/product/ad_item.png" alt="33,34"></li>
          <li><img src="../images/product/ad_item.png" alt="35,36"></li>
        </ul>
        <div class="float-clear"></div>
      </div>
    </section>
    <!-- 页面焦点元素 end -->
    
    
</div>
<!--Script
====================================================== -->
 <script type="text/javascript" src="../ntv/js/1common.js"></script>
 <script type="text/javascript" src="../ntv/js/2core.js"></script>
 <script type="text/javascript" src="../ntv/js/3key.js"></script>
 <script type="text/javascript" src="../ntv/js/4navigation.js"></script>
 <script type="text/javascript" src="../ntv/js/5page.js"></script>
 <script type="text/javascript" src="../ntv/js/6ipanel.js"></script>
 <script type="text/javascript" src="../ntv/js/6ngb_h.js"></script>
 <script type="text/javascript" src="../ntv/js/6pc.js"></script>
 <script type="text/javascript" src="../ntv/js/6shdv.js"></script>
 <script type="text/javascript" src="../ntv/js/7msg.js"></script>
 <script type="text/javascript" src="../ntv/js/8stb.js"></script>
 <script type="text/javascript" src="../ntv/js/effect/effect-slidemenu.js"></script>
 <script type="text/javascript">
    (function(){
       ntv.log.console("/page/product-index.html onload");
    })();
 </script>
 </body>
</html>

CSS代码:

/*!
 *
 * Copyright 2014-2015 ...
 *
 */
 
/*-- common
====================================================== */
.logo{left:45px; top:30px;}
.banner{left:0px; top:100px;}
.nav-bar{left:800px; top:40px;}
.nav-bar li{float: left; height: 45px; height: 45px; margin: 0px 30px 0px 0px;}

/*-- page/product-index.html
====================================================== */
.product-index{background-image: url("../images/common/bg.png"); background-repeat: no-repeat;}

.product-index .content{left:0px; top: 170px; height: 550px; width: 1280px; background-image: url("../images/product/list_bg.png"); background-repeat: no-repeat;}

.product-index .content .category {margin: 10px 0px;}
.product-index .content .category .pre-btn{float: left; width:25px; height: 270px; margin: 0px 10px 0px 50px;}
.product-index .content .category .pre-btn img{margin-top:90px;}
.product-index .content .category li{float: left; height: 260px; width: 181px; margin: 0px 18px 0px 18px;}

.product-index .content .category .next-btn{float: left; width:25px; height: 270px; top: -3px;}
.product-index .content .category .next-btn img{margin-top:90px;}

.product-index .line{height:2px; width:1280px; background-image: url("../images/product/line.png"); background-repeat: no-repeat;}

.product-index .content .ad {margin: 20px 0px 0px 20px;}
.product-index .content .ad li{float: left; height: 223px; width: 358px; margin: 0px 20px 0px 20px;}


/* 页面焦点元素 */
.product-index .category-f {left:85px; top:180px;}
.product-index .category-f li{float: left; height: 260px; width: 181px; margin: 0px 18px 0px 18px;}
.product-index .ad-f {left:41px; top:471px;}
.product-index .ad-f li{float: left; height: 223px; width: 358px; margin: 0px 19px 0px 20px;}

 

本文展示的源代码会在后续章节对代码进行解读并提供源代码下载。

转载于:https://my.oschina.net/cotonchen/blog/372600

C:\Users\15444\AppData\Local\Programs\Python\Python311\Scripts>pip install GDAL Collecting GDAL Using cached gdal-3.11.3.tar.gz (878 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Building wheels for collected packages: GDAL Building wheel for GDAL (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for GDAL (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [130 lines of output] C:\Users\15444\AppData\Local\Temp\pip-build-env-hy1ff_ep\overlay\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:82: SetuptoolsWarning: `license` overwritten by `pyproject.toml` corresp(dist, value, root_dir) C:\Users\15444\AppData\Local\Temp\pip-build-env-hy1ff_ep\overlay\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:82: SetuptoolsWarning: `extras_require` overwritten in `pyproject.toml` (optional-dependencies) corresp(dist, value, root_dir) Using numpy 2.3.1 running bdist_wheel running build running build_py creating build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdal.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdalconst.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdalnumeric.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdal_array.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdal_fsspec.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gnm.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\ogr.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\osr.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\__init__.py -> build\lib.win-amd64-cpython-311\osgeo creating build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal2tiles.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal2xyz.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdalattachpct.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdalcompare.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdalmove.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_calc.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_edit.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_fillnodata.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_merge.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_pansharpen.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_polygonize.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_proximity.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_retile.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_sieve.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\ogrmerge.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\ogr_layer_algebra.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\pct2rgb.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\rgb2pct.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\__init__.py -> build\lib.win-amd64-cpython-311\osgeo_utils creating build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\array_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\base.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\batch_creator.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\color_palette.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\color_table.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\extent_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\gdal_argparse.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\numpy_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\osr_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\progress.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\raster_creation.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\rectangle.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\__init__.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary creating build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\assemblepoly.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\build_jp2_from_xml.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\classify.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\crs2crs2grid.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\densify.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\dump_jp2.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\epsg_tr.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\esri2wkt.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\fft.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\fix_gpkg.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gcps2ogr.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gcps2vec.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gcps2wld.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal2grd.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalbuildvrtofvrt.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalchksum.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalcopyproj.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalfilter.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalident.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalimport.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalinfo.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdallocationinfo.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_auth.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_cp.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_create_pdf.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_ls.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_lut.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_minmax_location.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_mkdir.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_remove_towgs84.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_rm.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_rmdir.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_vrtmerge.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\get_soundg.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\histrep.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\hsv_merge.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\jpeg_in_tiff_extract.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\load2odbc.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\loslas2ntv2.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\magphase.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\make_fuzzer_friendly_archive.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\mkgraticule.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogr2vrt.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogrinfo.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogrupdate.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogr_build_junction_table.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogr_dispatch.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\rel.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\tigerpoly.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\tile_extent_from_raster.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\tolatlong.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_cloud_optimized_geotiff.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_geoparquet.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_gpkg.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_jp2.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\val_repl.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\vec_tr.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\vec_tr_spat.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\wcs_virtds_params.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\__init__.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples running egg_info writing gdal-utils\GDAL.egg-info\PKG-INFO writing dependency_links to gdal-utils\GDAL.egg-info\dependency_links.txt writing entry points to gdal-utils\GDAL.egg-info\entry_points.txt writing requirements to gdal-utils\GDAL.egg-info\requires.txt writing top-level names to gdal-utils\GDAL.egg-info\top_level.txt reading manifest file 'gdal-utils\GDAL.egg-info\SOURCES.txt' writing manifest file 'gdal-utils\GDAL.egg-info\SOURCES.txt' running build_ext building 'osgeo._gdal' extension building 'osgeo._gnm' extension building 'osgeo._ogr' extension building 'osgeo._osr' extension building 'osgeo._gdalconst' extension building 'osgeo._gdal_array' extension error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for GDAL Failed to build GDAL ERROR: Failed to build installable wheels for some pyproject.toml based projects (GDAL)
最新发布
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值