<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Creeper19472</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://arachne.crpteam.club/</id>
  <link href="https://arachne.crpteam.club/" rel="alternate"/>
  <link href="https://arachne.crpteam.club/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Creeper19472</rights>
  <subtitle>Portal Site of the Computer and Network Technology Division of Creeper Team</subtitle>
  <title>Arachne</title>
  <updated>2026-05-02T12:30:41.222Z</updated>
  <entry>
    <author>
      <name>Creeper19472</name>
    </author>
    <category term="技术" scheme="https://arachne.crpteam.club/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="FL Studio" scheme="https://arachne.crpteam.club/tags/FL-Studio/"/>
    <category term="BBCSO" scheme="https://arachne.crpteam.club/tags/BBCSO/"/>
    <category term="BBC Symphony Orchestra" scheme="https://arachne.crpteam.club/tags/BBC-Symphony-Orchestra/"/>
    <content>
      <![CDATA[<p>我在利用 FL Studio 2025 为一支室内管弦乐曲编曲时，使用了 BBCSO Discover 作为提琴的音源，但在导出音频时发现异常，表现为在约第十秒至第二十秒间音频里提琴的一条轨突然失声，之后恢复正常。</p><p>已知：工程中有多个使用了 BBCSO Discover 这一插件的轨道，每个轨道与全曲中使用到的多种提琴之一相对应。</p><p>由于在不改变其他变量的情况下，音频中渲染发生异常的部分几乎完全固定，因此我最初怀疑问题可能与那一特定部分的某些配置有关，因而对那部分 Pattern 做了修改，希望能够解决问题，但没有成功。尝试调整导出时的设置，无效；尝试重装 BBCSO Discover 来解决问题，仍然无效。即使偶尔产生效果，也只是能够影响失声在音频中出现的时间点。</p><p>通过询问 Gemini 了解到修改插件本身的一些设置可能能够解决问题。一番捣鼓后发现只有同时令“Make bridged”为开、“Notify about rendering mode”为关时才能解决失声问题。为什么通过这样的组合能够解决问题尚不明确，不过暂且将此解决方案记录下来以供参考。</p>]]>
    </content>
    <id>https://arachne.crpteam.club/2026/05/01/troubleshooting-collaboration-bbcso-fl/</id>
    <link href="https://arachne.crpteam.club/2026/05/01/troubleshooting-collaboration-bbcso-fl/"/>
    <published>2026-05-01T02:56:29.000Z</published>
    <summary>
      <![CDATA[<p>我在利用 FL Studio 2025 为一支室内管弦乐曲编曲时，使用了 BBCSO Discover 作为提琴的音源，但在导出音频时发现异常，表现为在约第十秒至第二十秒间音频里提琴的一条轨突然失声，之后恢复正常。</p>
<p>已知：工程中有多个使用了 BBCSO Dis]]>
    </summary>
    <title>记对 BBC Symphony Orchestra 在 FL Studio 2025 上工作异常的一次故障排除</title>
    <updated>2026-05-02T12:30:41.222Z</updated>
  </entry>
  <entry>
    <author>
      <name>Creeper19472</name>
    </author>
    <category term="技术" scheme="https://arachne.crpteam.club/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="Flet" scheme="https://arachne.crpteam.club/categories/%E6%8A%80%E6%9C%AF/Flet/"/>
    <content>
      <![CDATA[<div class="callout callout--titled info custom-class mb-4 rounded-small shadow-redefine-flat bg-(--callout-bg-color) p-3 pl-1 relative flex flex-row gap-2"><div role="none" class="rounded-full self-stretch w-0.5 bg-(--callout-primary-color) shrink-0 opacity-60"></div><div class="flex flex-col gap-2"><div class="callout__title flex items-center gap-2 font-semibold tracking-tight">对本文时效性的说明</div><div class="callout__content markdown-body flex-1 min-w-0"><p>由于 Flet 在 0.83.0 版本对构建模板的托管方式做了破坏性改动，因此本文的一些内容可能已经过时。</p></div></div></div><p>在<a href="/2026/03/14/troubleshooting-flet-builds/" title="记 Flet 开发版构建失败的常见问题解决">上篇文章</a>中我曾提到：为了能够在构建好的应用中使用高版本 Python 引入的新特性，需要自行实现对高版本构建的支持。本文将更加详细地讨论实现此目标的方法，但由于这个问题本身的复杂性，本文也仅能介绍一种可以基本达到目的的方法，而无法给出能够兼顾方方面面的完全解。</p><h2 id="0-分析与准备"><a href="#0-分析与准备" class="headerlink" title="0. 分析与准备"></a>0. 分析与准备</h2><p>要令 Flet 能基于高版本的 Python 构建应用程序，显然地，我们至少需要完成以下几个步骤：</p><ol><li>封装 Python 运行时</li><li>编译适配新版本的 .whl 文件</li><li>修改内部实现，使得 Flet 能够使用新的资源构建应用</li></ol><p>而经过分析发现，参与整个 <code>flet build</code> 过程的除了 <code>flet-cli</code> 自身之外，还有两个托管于 <code>github:flet-dev</code> 的仓库：<code>flet-build-template</code> 和 <code>serious-python</code>。<code>flet-build-template</code> 为构建流程提供了模板，并指定了可构建的所有架构；<code>serious-python</code> 则实际负责将 Python 部分的代码进行打包，并将适配各架构的 pip 包放入对应的目录。值得注意的是，<code>serious-python</code> 还会在执行 pip 命令的同时追加 <code>--extra-index-url</code> 参数（位于 <code>src\serious_python\bin\package_command.dart</code>），以使 pip 从 flet-dev 自有的包索引库中查找为 Android 和 iOS 构建的包，因为发布于 PyPI 的大多数包都是没有针对这些平台的构建版的。</p><p>为了进行之后的改动，我们需要 fork <code>flet-build-template</code>和 <code>serious-python</code>两个代码仓库。同时，还需准备好需要的 Android SDK，如果你希望多平台构建仍然至少能对 Android 有效的话。由于需要编译 .whl 文件，建议在 Linux 下进行之后的工作，确只能在 Windows 下进行的，也请尽可能使用 WSL。</p><div class="callout callout--titled info custom-class mb-4 rounded-small shadow-redefine-flat bg-(--callout-bg-color) p-3 pl-1 relative flex flex-row gap-2"><div role="none" class="rounded-full self-stretch w-0.5 bg-(--callout-primary-color) shrink-0 opacity-60"></div><div class="flex flex-col gap-2"><div class="callout__title flex items-center gap-2 font-semibold tracking-tight">说明</div><div class="callout__content markdown-body flex-1 min-w-0"><p>不 fork <code>python-build</code> 的原因是 flet-dev 已提供了我们需要的 Python 3.14.3 构建——我们也会发现，前述准备部分的第一个步骤实际已经完成。仅当你需要为其他版本进行封装时才需要对这个仓库进行改动，但此处不做更多讨论。</p></div></div></div><p>上述步骤的难点实际在于为移动端架构构建二进制文件。仅 Android 而言，交叉编译的存在就使得整个构建过程十分复杂且容易出错。如果像我一样此前对编译和构建原理并不熟悉，接下来的过程将很可能令人十分头痛。</p><h2 id="1-编译-whl-文件和创建自有包索引"><a href="#1-编译-whl-文件和创建自有包索引" class="headerlink" title="1. 编译 .whl 文件和创建自有包索引"></a>1. 编译 .whl 文件和创建自有包索引</h2><div class="callout callout--titled info custom-class mb-4 rounded-small shadow-redefine-flat bg-(--callout-bg-color) p-3 pl-1 relative flex flex-row gap-2"><div role="none" class="rounded-full self-stretch w-0.5 bg-(--callout-primary-color) shrink-0 opacity-60"></div><div class="flex flex-col gap-2"><div class="callout__title flex items-center gap-2 font-semibold tracking-tight">说明</div><div class="callout__content markdown-body flex-1 min-w-0"><p>如果你完全不打算为移动端构建应用，则此部分可以跳过。</p></div></div></div><p>由于移动端编译是一个十分复杂的过程，因此我强烈建议你应先将注意力集中于那些正由你的项目使用的、因为并非纯 Python 实现所以需要编译的包，而不是试图将上游的 <code>mobile-forge</code> 所含的全部包都移植一遍。在移植过程中，不断请教 AI 将是个好主意，因为它能够较为清楚地分析你正遇上的问题。你可以让 AI 帮助你编写一段编译脚本，Claude Sonnet 4.6 在这方面有不错的效果。</p><p>尽管 cibuildwheel 作为一种工具已被推出以简化构建过程，但由于其可供参考的资料实在太少，所以并不一定推荐使用。</p><p>在你取得你需要的所有 .whl 文件之后，便可着手创建属于你自己的包索引。你可以利用 GitHub Pages 来托管你构建好的 .whl 文件，但需要注意站点的结构应当符合 pip 的要求。你还可以利用 GitHub Actions 来自动地根据已有的 .whl 文件创建站点。在这方面，你可以参考 <a class="link"   href="https://github.com/cfms-dev/platform-wheels" >CFMS 采用的 workaround<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>。</p><h2 id="2-修改-flet-build-template"><a href="#2-修改-flet-build-template" class="headerlink" title="2. 修改 flet-build-template"></a>2. 修改 <code>flet-build-template</code></h2><p>这一步骤的目的是从构建模板中移除对 <code>armeabi-v7a</code> 和 <code>x86</code> 架构的构建支持，因为 Python 3.14 已不再对这两个架构提供支持。</p><p>编辑 <code>&#123;&#123;cookiecutter.out_dir&#125;&#125;\android\app\build.gradle.kts</code> 并按以下内容注释指定行：</p><div class="code-container" data-rel="Groovy"><figure class="iseeu highlight groovy"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">[...]</span><br><span class="line">android &#123;</span><br><span class="line">    namespace = <span class="string">&quot;&#123;&#123; cookiecutter.org_name_2 &#125;&#125;.&#123;&#123; cookiecutter.package_name &#125;&#125;&quot;</span></span><br><span class="line">    compileSdk = flutter.compileSdkVersion</span><br><span class="line">    ndkVersion = flutter.ndkVersion</span><br><span class="line"></span><br><span class="line">    packaging &#123;</span><br><span class="line">        jniLibs &#123;</span><br><span class="line">            useLegacyPackaging = <span class="literal">true</span></span><br><span class="line">            keepDebugSymbols += listOf(</span><br><span class="line">                <span class="string">&quot;*/arm64-v8a/libpython*.so&quot;</span>,</span><br><span class="line">                <span class="comment">// &quot;*/armeabi-v7a/libpython*.so&quot;,</span></span><br><span class="line">                <span class="comment">// &quot;*/x86/libpython*.so&quot;,</span></span><br><span class="line">                <span class="string">&quot;*/x86_64/libpython*.so&quot;</span>,</span><br><span class="line">            )</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">[...]</span><br><span class="line">        ndk &#123;</span><br><span class="line">            &#123;% <span class="keyword">if</span> cookiecutter.options.target_arch %&#125;</span><br><span class="line">            abiFilters += listOf(&#123;% <span class="keyword">for</span> arch <span class="keyword">in</span> cookiecutter.options.target_arch %&#125;<span class="string">&quot;&#123;&#123; arch &#125;&#125;&quot;</span>&#123;% <span class="keyword">if</span> not loop.last %&#125;, &#123;% endif %&#125;&#123;% endfor %&#125;)</span><br><span class="line">            &#123;% <span class="keyword">else</span> %&#125;</span><br><span class="line">            abiFilters += listOf(<span class="string">&quot;arm64-v8a&quot;</span>, <span class="string">&quot;x86_64&quot;</span>) <span class="comment">// &quot;armeabi-v7a&quot;, </span></span><br><span class="line">[...]</span><br></pre></td></tr></table></figure></div><h2 id="3-修改-serious-python"><a href="#3-修改-serious-python" class="headerlink" title="3. 修改 serious-python"></a>3. 修改 <code>serious-python</code></h2><h3 id="注释、增添、查找和替换"><a href="#注释、增添、查找和替换" class="headerlink" title="注释、增添、查找和替换"></a>注释、增添、查找和替换</h3><p>对于 <code>serious-python</code>，我们需要按与上一步类似的做法全局查找并移除与 <code>armeabi-v7a</code> 和 <code>x86</code> 有关的部分。在此之后，编辑 <code>src\serious_python\bin\package_command.dart</code>：</p><div class="code-container" data-rel="Dart"><figure class="iseeu highlight dart"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> buildPythonVersion = <span class="string">&quot;3.14.3&quot;</span>;</span><br><span class="line"><span class="comment">// 你要使用的 Python 版本</span></span><br><span class="line"><span class="keyword">const</span> buildPythonReleaseDate = <span class="string">&quot;20260203&quot;</span>; </span><br><span class="line"><span class="comment">// 这个常量需根据 https://github.com/astral-sh/python-build-standalone/releases/ 确定。</span></span><br></pre></td></tr></table></figure></div><p>并在此处添加：</p><div class="code-container" data-rel="Dart"><figure class="iseeu highlight dart"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">[...]</span><br><span class="line">      <span class="keyword">var</span> junkFiles = isMobile ? junkFilesMobile : junkFilesDesktop;</span><br><span class="line"></span><br><span class="line">      <span class="comment">// Extra indexes</span></span><br><span class="line">      <span class="built_in">List</span>&lt;<span class="built_in">String</span>&gt; extraPyPiIndexes = [mobilePyPiUrl];</span><br><span class="line"></span><br><span class="line">      <span class="comment">// 在这里添加</span></span><br><span class="line">      extraPyPiIndexes.add(<span class="string">&quot;https://cfms-dev.github.io/platform-wheels/&quot;</span>); <span class="comment">// 添加你自有的包索引</span></span><br><span class="line">      <span class="comment">// 添加部分结束</span></span><br><span class="line">      <span class="keyword">if</span> (platform == <span class="string">&quot;Pyodide&quot;</span>) &#123;</span><br><span class="line">        pyodidePyPiServer = <span class="keyword">await</span> startSimpleServer();</span><br><span class="line">[...]</span><br></pre></td></tr></table></figure></div><p>修改 <code>src\serious_python_android\android\build.gradle</code>：</p><div class="code-container" data-rel="Gradle"><figure class="iseeu highlight gradle"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">def</span> python_version = <span class="string">&#x27;3.14&#x27;</span></span><br></pre></td></tr></table></figure></div><p>按类似的方法全局查找 <code>3.12</code> 的出现位置，并将确为 Python 版本号的部分修改为 <code>3.14</code>，如 <code>&quot;$&#123;PYTHON_PACKAGE&#125;/lib/libpython3.12.so.1.0&quot;</code> -&gt; <code>&quot;$&#123;PYTHON_PACKAGE&#125;/lib/libpython3.14.so.1.0&quot;</code>。</p><h3 id="重新运行-ffigen"><a href="#重新运行-ffigen" class="headerlink" title="重新运行 ffigen"></a>重新运行 ffigen</h3><p>转到 <code>src/serious_python_android</code>，编辑 <code>python_ffigen.yaml</code>，修改其中内容以指向你准备好的构建版的头文件。它们可以从 <code>github:flet-dev/python-build</code> 的 Releases 中取得（<code>python-android-mobile-forge-3.14.tar.gz</code>）。</p><p>之后，运行 <code>dart run ffigen --config python_ffigen.yaml</code>。视情况而定，你可能还需要增加对 llvm 的引用。以下是一份示例：</p><div class="code-container" data-rel="Yaml"><figure class="iseeu highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Run with `dart run ffigen --config python_ffigen.yaml`.</span></span><br><span class="line"></span><br><span class="line"><span class="attr">output:</span> <span class="string">&quot;lib/src/gen.dart&quot;</span></span><br><span class="line"><span class="comment"># enums:</span></span><br><span class="line"><span class="comment">#   rename:</span></span><br><span class="line"><span class="comment">#     &quot;_(.*)&quot;: &quot;$1&quot;</span></span><br><span class="line"><span class="comment">#   member-rename:</span></span><br><span class="line"><span class="comment">#     &quot;_(.*)&quot;:</span></span><br><span class="line"><span class="comment">#       &quot;_(.*)&quot;: &quot;$1&quot;</span></span><br><span class="line"><span class="attr">globals:</span></span><br><span class="line">  <span class="attr">rename:</span></span><br><span class="line">    <span class="string">&quot;^class (\\w+) extends ffi.Struct&quot;</span><span class="string">:</span> <span class="string">&quot;final class $1 extends ffi.Struct&quot;</span></span><br><span class="line">    <span class="string">&quot;^class (\\w+) extends ffi.Opaque&quot;</span><span class="string">:</span> <span class="string">&quot;final class $1 extends ffi.Opaque&quot;</span></span><br><span class="line">    <span class="string">&quot;^class (\\w+) extends ffi.Union&quot;</span><span class="string">:</span> <span class="string">&quot;final class $1 extends ffi.Union&quot;</span></span><br><span class="line"><span class="attr">headers:</span></span><br><span class="line">  <span class="attr">entry-points:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;C:\\Users\\[username]\\Downloads\\py314\\install\\android\\arm64-v8a\\python-3.14.3\\include\\python3.14\\Python.h&quot;</span></span><br><span class="line">  <span class="attr">include-directives:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;C:\\Users\\[username]\\Downloads\\py314\\install\\android\\arm64-v8a\\python-3.14.3\\include\\python3.14\\**&quot;</span></span><br><span class="line">  </span><br><span class="line"><span class="attr">name:</span> <span class="string">&quot;CPython&quot;</span></span><br><span class="line"><span class="attr">compiler-opts:</span> </span><br><span class="line"><span class="bullet">-</span> <span class="string">&quot;--target=aarch64-linux-android21&quot;</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">&quot;-IC:/Users/[username]/AppData/Local/Android/Sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/windows-x86_64/lib/clang/19/include&quot;</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">&quot;-IC:/Users/[username]/AppData/Local/Android/Sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/aarch64-linux-android&quot;</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">&quot;--sysroot=C:/Users/[username]/AppData/Local/Android/Sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/windows-x86_64/sysroot&quot;</span></span><br><span class="line"><span class="attr">description:</span> <span class="string">&quot;Bindings to Python C interface\nignore_for_file: unused_field, unused_element\n&quot;</span></span><br><span class="line"><span class="comment">#array-workaround: true</span></span><br></pre></td></tr></table></figure></div><h2 id="4-指向你修改好的-flet-build-template-和-serious-python"><a href="#4-指向你修改好的-flet-build-template-和-serious-python" class="headerlink" title="4. 指向你修改好的 flet-build-template 和 serious-python"></a>4. 指向你修改好的 <code>flet-build-template</code> 和 <code>serious-python</code></h2><p>编辑你项目的 <code>pyproject.toml</code>：</p><div class="code-container" data-rel="Toml"><figure class="iseeu highlight toml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[tool.flet.template]</span></span><br><span class="line"><span class="attr">url</span> = <span class="string">&quot;gh:&#123;你的账户名&#125;/flet-build-template&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="section">[tool.flet.flutter.pubspec.dependency_overrides]</span></span><br><span class="line"><span class="attr">serious_python</span> = &#123; git = &#123; url = <span class="string">&quot;https://github.com/&#123;你的账户名&#125;/serious-python.git&quot;</span>, ref = <span class="string">&quot;main&quot;</span>, path = <span class="string">&quot;src/serious_python&quot;</span> &#125; &#125;</span><br></pre></td></tr></table></figure></div>]]>
    </content>
    <id>https://arachne.crpteam.club/2026/03/15/flet-python314/</id>
    <link href="https://arachne.crpteam.club/2026/03/15/flet-python314/"/>
    <published>2026-03-15T06:00:41.000Z</published>
    <summary>
      <![CDATA[<div class="callout callout--titled info custom-class mb-4 rounded-small shadow-redefine-flat bg-(--callout-bg-color) p-3 pl-1 relative flex]]>
    </summary>
    <title>为 Flet 提供 Python 3.14 构建支持</title>
    <updated>2026-03-16T01:21:50.600Z</updated>
  </entry>
  <entry>
    <author>
      <name>Creeper19472</name>
    </author>
    <category term="技术" scheme="https://arachne.crpteam.club/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="Flet" scheme="https://arachne.crpteam.club/categories/%E6%8A%80%E6%9C%AF/Flet/"/>
    <content>
      <![CDATA[<p><a class="link"   href="https://github.com/flet-dev/flet" >Flet<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a> 是一个允许利用 Python 来编写和构建 Flutter 应用的框架。如果你在寻找使用 Python 构建图形化界面应用的解决方案的话，除了尝试我们已经耳熟能详的 Tkinter 和 Qt 等框架之外，Flet 也是一个很有吸引力的选择——它支持一次编写，多端部署，能够有效地节省那些为了为桌面端和移动端分别进行适配所需要消耗的大量时间。</p><p>不过，呃……如果你真的试图投身于其中，那么你将不可避免地碰上一系列问题，因为 Flet 在无法带来对 Flutter 本身问题的修正的同时，自己还会带来很多问题。而说实话，Flet 的社群活跃度并不是很高，对于国际社群是如此，在中文圈就更加惨不忍睹了。尽管 Flet 的主要开发者只有寥寥几人，但在过去的数个月中，Flet 还是发生了一些值得注意的大版本迭代，而这些迭代所造成的影响似乎还是尚未有任何中文文章介绍过的。我或许会在之后的某个时候讨论这些改动中非常值得注意的地方，但对于本文而言，我将重点就在使用最新开发版本的 Flet 构建应用时所可能遇到的各种问题进行简述。本文假定你要构建的代码不存在问题。</p><h2 id="1-找不到对应的分支"><a href="#1-找不到对应的分支" class="headerlink" title="1. 找不到对应的分支"></a>1. 找不到对应的分支</h2><p>当运行 <code>flet build</code> 命令时发生以下错误：</p><div class="code-container" data-rel="Console"><figure class="iseeu highlight console"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">The 0.82.3 branch of repository https://github.com/flet-dev/flet-build-template.git could not found, have you made a typo?</span><br></pre></td></tr></table></figure></div><p>这是由上游的 <code>flet-build-template</code> 仓库尚未创建具有和此开发版相对应的名称的分支所导致的。这种事情时常发生，特别是对于开发版本而言。尽管我正试图请求开发者们添加对自动向下检索功能的支持，但在那样的功能实现之前，为了解决这个问题，要么根据<a class="link"   href="https://docs.flet.dev/publish/#template-reference" >官方文档<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>的提示显式地指定一个你确认可以正常完成构建的 Reference，要么自行 fork 一份<a class="link"   href="https://github.com/flet-dev/flet-build-template.git" >构建模板<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>，为这个 fork 手动添加需要的分支（一种通常的做法是从能找到的具有最新版本号的分支创建而来），然后再将要使用的构建模板<a class="link"   href="https://docs.flet.dev/publish/#template-source" >手动配置为你所拥有的 fork 仓库<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>。你将可能看到这种做法在之后的开发过程中显得好处多多。</p><p>你也可以顺带向 Flet 提出 Issue，提醒他们记得解决这个问题——但最好不要指望他们能够尽快处理它。</p><h2 id="2-未定义的方法"><a href="#2-未定义的方法" class="headerlink" title="2. 未定义的方法"></a>2. 未定义的方法</h2><div class="code-container" data-rel="Console"><figure class="iseeu highlight console"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">[16:53:30] Building Windows application...                                     </span><br><span class="line">           ../flutter-packages/flet_datatable2/lib/src/datatable2.dart(193,12):</span><br><span class="line">           error GE5CFE876: The method &#x27;ConstrainedControl&#x27; isn&#x27;t defined for  </span><br><span class="line">           the type &#x27;_DataTable2ControlState&#x27;.                                 </span><br></pre></td></tr></table></figure></div><p>这通常是由 Flet 即使在开发版也仍然拉取仅与最新的正式版相匹配的 Flutter 包导致的。Flet 仅在每个正式版发布时才向 pub.dev 推送新的包版本，如果开发版在这段窗口期内添加了对 Flutter 包部分的改动（例如增加了新的控件或修改了已有控件的实现），便容易引发上面的问题。你也可能发现在开发版中新添加的控件在构建后变为 <code>Unknown control: ...</code> 的<a class="link"   href="https://github.com/flet-dev/flet/issues/6202" >问题<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>，这同样可能是由上述的原因所致。</p><p>为了解决这个问题，请在项目的 <code>pyproject.toml</code> 中显式指定依赖到 Flet 的 Git 仓库：</p><div class="code-container" data-rel="Toml"><figure class="iseeu highlight toml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[tool.flet.flutter.pubspec.dependency_overrides]</span></span><br><span class="line"><span class="attr">flet</span> = &#123; git = &#123; url = <span class="string">&quot;https://github.com/flet-dev/flet.git&quot;</span>, ref = <span class="string">&quot;main&quot;</span>, path = <span class="string">&quot;packages/flet&quot;</span> &#125; &#125;</span><br></pre></td></tr></table></figure></div><p>官方文档说明<a class="link"   href="https://docs.flet.dev/publish/#prerelease-compatibility" >见此<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>。</p><h2 id="3-使用高版本-Python-引入的新功能"><a href="#3-使用高版本-Python-引入的新功能" class="headerlink" title="3. 使用高版本 Python 引入的新功能"></a>3. 使用高版本 Python 引入的新功能</h2><p>尽管 Flet 在其 PyPI 页上标榜自身为可在 Python 3.10 及以上所有版本运行的包，但其在构建时却仅使用 Python 3.12 为应用的内置环境，因而导致由版本不同产生的各种兼容性问题，特别是当你使用了一些仅有高版本 Python 才有的写法的时候（例如 <code>@warnings.deprecated()</code>，<a class="link"   href="https://docs.python.org/zh-cn/3.14/library/warnings.html#warnings.deprecated" >于 Python 3.13 引入<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>）。这样的兼容性问题一时还难以被定位。</p><p>为了解决这个问题，要么去除对那些仅在 Python 更高版本才可用的功能的依赖，要么自行为新版 Python 构建提供支持（上游与此相关的计划遥遥无期）——但这个过程非常复杂，以至于完全可以单开一篇文章来讨论。CFMS 目前就通过这种方案得以使用 Python 的最新特性和改进。另一种未经测试的方法是采用 <code>flet pack</code> 进行规避，因为它似乎采用了不同的封装机制。</p><h2 id="4-意外地使用了更旧的-Flet-版本"><a href="#4-意外地使用了更旧的-Flet-版本" class="headerlink" title="4. 意外地使用了更旧的 Flet 版本"></a>4. 意外地使用了更旧的 Flet 版本</h2><p>出于未知的原因，Flet 在构建时依赖的工具之一，<code>serious-python</code>，在运行<code>pip install</code>时似乎不能分辨到底需要安装的是各依赖项的预发布版本还是正式版本，导致构建产生的应用中仍在使用旧版本（正式版）的 Flet，并引发与第三部分所述类似的莫名其妙的问题。一种做法是直接修改 <code>serious-python</code> 的实现，在 <code>src\serious_python\bin\package_command.dart</code> 中，将</p><div class="code-container" data-rel="Dart"><figure class="iseeu highlight dart"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">await</span> runPython([</span><br><span class="line">  <span class="string">&#x27;-m&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;pip&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;install&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;--upgrade&#x27;</span>,</span><br><span class="line">  ...pipArgs,</span><br><span class="line">  <span class="string">&#x27;--target&#x27;</span>,</span><br><span class="line">  sitePackagesDir,</span><br><span class="line">  ...requirements</span><br><span class="line">], environment: pipEnv);</span><br></pre></td></tr></table></figure></div><p>改为：</p><div class="code-container" data-rel="Dart"><figure class="iseeu highlight dart"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">await</span> runPython([</span><br><span class="line">  <span class="string">&#x27;-m&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;pip&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;install&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;--pre&#x27;</span>,</span><br><span class="line">  <span class="string">&#x27;--upgrade&#x27;</span>,</span><br><span class="line">  ...pipArgs,</span><br><span class="line">  <span class="string">&#x27;--target&#x27;</span>,</span><br><span class="line">  sitePackagesDir,</span><br><span class="line">  ...requirements</span><br><span class="line">], environment: pipEnv);</span><br></pre></td></tr></table></figure></div><p>然后按照与前述第二部分相同的方法在你项目的 <code>pyproject.toml</code> 中指定 <code>dependency_overrides</code> 即可。如果这样仍不奏效的话，也可以尝试修改 <code>flet-build-template</code> 中 <code>&#123;&#123;cookiecutter.out_dir&#125;&#125;/pubspec.yaml</code> 下对 <code>serious-python</code> 依赖关系的定义。</p>]]>
    </content>
    <id>https://arachne.crpteam.club/2026/03/14/troubleshooting-flet-builds/</id>
    <link href="https://arachne.crpteam.club/2026/03/14/troubleshooting-flet-builds/"/>
    <published>2026-03-14T10:43:55.000Z</published>
    <summary>
      <![CDATA[<p><a class="link"   href="https://github.com/flet-dev/flet" >Flet<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top]]>
    </summary>
    <title>记 Flet 开发版构建失败的常见问题解决</title>
    <updated>2026-05-02T12:30:41.222Z</updated>
  </entry>
  <entry>
    <author>
      <name>Creeper19472</name>
    </author>
    <content>
      <![CDATA[<p>这里是苦力怕团队计算机网络技术分支（Computer and Network Technology Division of Creeper Team），负责维护团体的门户站点和开发面向内部的应用，并为受苦力怕团队管理的各下级组织及其项目提供有限的技术支持。</p><p>在苦力怕团队于2025年12月31日<a class="link"   href="https://crpteam.club/2025/12/31/%E8%8B%A6%E5%8A%9B%E6%80%95%E5%9B%A2%E9%98%9F-2026%E6%96%B0%E5%B9%B4%E8%B4%BA%E8%AF%8D/" >宣布进入保留状态<i class="fa-solid fa-arrow-up-right ml-[0.2em] font-light align-text-top text-[0.7em] link-icon"></i></a>后，此分支继续负责开发由项目 P-202206-01（《溯流而上》）之项目组——也即遗忘之组——使用的 Confidential File Management System（CFMS）。由于一直没有招募到合适的成员，这个分支很长一段时间以来都由我，也就是 Creeper19472，充任唯一的成员和管理者。</p><p>这个站点是在上述的事件发生之后才建立的，建立它的理由之一是为了提供对由我们维护的、基于 WebSocket 协议通信的 CFMS 服务端和其客户端的教学，之二则是用于发表我个人在其他技术领域所做的一些研究，也就是作为我的个人博客——因为计算机与网络技术分支从很久以前起就未有过新的成员，在苦力怕团队停止对外招募之后，出现其他任何新的成员就更不可能了。</p><p>读者可能已经发现，此站点的名称被指定为“Arachne”，而非其他更常见的可能名称。“Arachne”之名取自希腊神话中一位技艺精湛的织布工（后变为蜘蛛）——我们希望能从这里开始，在之后的旅程中，逐步编织起一张多元而全面的信息之网。读者在未来的旅程中也可能发现，基于文章面向的受众和用途的差异，我所采用的文风也会有所出入。</p><p>不过，无论如何，欢迎您访问<strong>苦力怕团队计算机与网络技术分支的门户站点</strong>。祝您浏览愉快，并能在此找到您所期望之物！</p>]]>
    </content>
    <id>https://arachne.crpteam.club/2026/03/14/beginning/</id>
    <link href="https://arachne.crpteam.club/2026/03/14/beginning/"/>
    <published>2026-03-14T04:58:31.000Z</published>
    <summary>
      <![CDATA[<p>这里是苦力怕团队计算机网络技术分支（Computer and Network Technology Division of Creeper Team），负责维护团体的门户站点和开发面向内部的应用，并为受苦力怕团队管理的各下级组织及其项目提供有限的技术支持。</p>
<p>在]]>
    </summary>
    <title>登程致意</title>
    <updated>2026-05-02T12:30:41.222Z</updated>
  </entry>
</feed>
