Failed to find dependencies: sqlite:from<native>
— 焉知非鱼Failed to find dependencies
问题
今天想试一下 Raku 中的一个终端框架, 名字为 Vikna。但是这个模块在标准的 Rakudo 中还不能运行(截至 2020.07 月版)。只能安装特定分支的 Rakudo, 但是安装 Rakudo 的时候, 由于众所周知的网络原因, 在终端中克隆代码仓库特别慢, 十几k的速度, 下载不到一半就被服务器中断了, 特别耗费时间。无奈在 ~/.zshrc
中开启代理:
function proxy_on() {
export no_proxy="localhost,127.0.0.1,localaddress,localdomain.com"
export http_proxy="http://127.0.0.1:1089"
export https_proxy=$http_proxy
echo -e "已开启代理"
}
proxy_on()
function socks_on() {
# SOCKS5 代理设置
export no_proxy="localhost,127.0.0.1,localaddress,localdomain.com"
export http_proxy="socks5://127.0.0.1:1080"
export https_proxy="socks5://127.0.0.1:1080"
echo -e "SOCKS5 代理已开启"
}
socks_on()
试了一下速度还行。不知道是哪个配置起的作用。
接下来安装 Vikna 模块的时候, 爆出了如下错误:
Failed to find dependencies: sqlite:from<native>
在 modules.raku.org 上搜索 sqlite
, 发现是名为 DB::SQLite
的模块。
查看 META6.json
, 该模块依赖了 NativeLibs
, 于是先尝试安装 NativeLibs
:
zef install NativeLibs
但是报错了, 它竟然需要安装依赖 DBIish
。查看 NativeLibs
的信息:
zef info NativeLibs
- Info for: NativeLibs
- Identity: DBIish:ver<0.6.0>
- Recommended By: Zef::Repository::LocalCache
- Installed: No
Description: Database connectivity for Raku
License: BSD-2-Clause
Source-url: git://github.com/perl6/DBIish.git
Provides: 28 modules
Depends: 1 items
发现了吗? 安装 NativeLibs 实际上就是安装 DBIish! 可能是缓存的原因。所以还是直接用 url 来安装最新的吧:
zef install https://github.com/salortiz/NativeLibs.git
然后 zef install DB::SQLite
还是报同样的错误。我以为是 zef 找不到 sqlite 的 lib 库, 于是在 ~/.zshrc
中加上了 sqlite 库的 PATH 路径:
export PATH="/usr/local/opt/sqlite/bin:$PATH"
export PATH="/usr/local/opt/sqlite/lib:$PATH"
再次 zef install DB::SQLite
还是不行。又建立了软连接, 仍然不行:
ln -s /usr/local/Cellar/sqlite/3.32.3/lib/libsqlite3.0.dylib ~/.raku/lib/libsqlite3.0.dylib
ln -s /usr/local/Cellar/sqlite/3.32.3/lib/libsqlite3.dylib ~/.raku/lib/libsqlite3.dylib
最后发现是 CPAN 没有同步 github 的 META6.json:
CPAN 中的依赖配置如下:
"depends" : {
"runtime" : {
"requires" : [
"DB",
"NativeLibs:ver<0.0.7>:auth<github:salortiz>",
"sqlite:from<native>"
]
},
"test" : {
"requires" : [ "Test", "Test::When" ]
}
},
github 中的依赖配置如下:
"depends" : {
"runtime" : {
"requires" : [
"DB",
"NativeLibs:ver<0.0.7>:auth<github:salortiz>",
"sqlite3:from<native>:ver<0>"
]
},
"test" : {
"requires" : [ "Test", "Test::When" ]
}
},
可以看到 github 中的 sqlite 依赖已经改为 sqlite3 了。
我有两个 Rakudo, 一个是 2020.07 月版本的, 一个是新安装的 v-dispatchers
版本。不想删除 2020.07 版本的 Rakudo, 于是 zef 安装模块的时候, 又出错了, 它仍然使用了 ~opt/rakudo/
, 即 2020.07 版本的 Rakudo(我已经把这个版本的 Rakudo PATH 变量注释了, 并且把 rakudo 的目录名也改了)。但是 zef 会被安装到 ~/opt/rakudo-home/share/perl6/site/bin
下, 所以删除了旧的 rakudo 之后, zef 也会被删除。只能对新安装的 Rakudo 再安装一次 zef:
git clone https://github.com/ugexe/zef.git
cd zef
raku -I. bin/zef install .
安装 LWP::Simple
测试又卡住了:
zef install https://github.com/raku-community-modules/raku-lwp-simple.git
===> Searching for missing dependencies: MIME::Base64, URI, JSON::Tiny
===> Testing: MIME::Base64:ver<1.2.1>:auth<github:retupmoca>
===> Testing [OK] for MIME::Base64:ver<1.2.1>:auth<github:retupmoca>
===> Testing: URI:ver<0.3.0>
===> Testing [OK] for URI:ver<0.3.0>
===> Testing: JSON::Tiny:ver<1.0>
===> Testing [OK] for JSON::Tiny:ver<1.0>
===> Testing: LWP::Simple:ver<0.106>:auth<github:perl6>
zef --/test https://github.com/raku-community-modules/raku-lwp-simple.git
最后 raku-pod-render 又测试失败, 删除缓存重新安装:
rm -rf ~/.zef/store/raku-pod-render.git
几个小时过去了。Raku 的生态系统工具链还差的很!