AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 789897
Accepted
Savanni D'Gerinel
Savanni D'Gerinel
Asked: 2016-07-15 10:29:05 +0800 CST2016-07-15 10:29:05 +0800 CST 2016-07-15 10:29:05 +0800 CST

如何为 lua 设置 nix-shell 脚本?

  • 772

我正在尝试设置一个包含 lua 5.2、lua 套接字库和其他一些库的 nix-shell 脚本。但是,当我加载 shell 时,最终只有 Lua 存在。

with import <nixpkgs> {};
stdenv.mkDerivation rec {
  name = "lua-env";
  buildInputs = [ lua52Packages.lua lua52Packages.luasocket lua52Packages.luasec lua52Packages.cjson ];
}

当我运行 shell 时,这就是我得到的:

savanni@lapis:~  $ nix-shell lua.nix 

[nix-shell:~]$ lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> require 'socket'
stdin:1: module 'socket' not found:
    no field package.preload['socket']
    no file '/usr/share/lua/5.2/socket.lua'
    no file '/usr/share/lua/5.2/socket/init.lua'
    no file '/usr/lib/lua/5.2/socket.lua'
    no file '/usr/lib/lua/5.2/socket/init.lua'
    no file './socket.lua'
    no file '/usr/lib/lua/5.2/socket.so'
    no file '/usr/lib/lua/5.2/loadall.so'
    no file './socket.so'
stack traceback:
    [C]: in function 'require'
    stdin:1: in main chunk
    [C]: in ?
> 

[nix-shell:~]$ exit
savanni@lapis:~  $ 
nixos
  • 2 2 个回答
  • 716 Views

2 个回答

  • Voted
  1. Best Answer
    wizzup
    2017-08-25T04:44:22+08:002017-08-25T04:44:22+08:00

    你必须设置LUA_PATH和LUA_CPATH

    这shell.nix应该工作,

    with import <nixpkgs> {};
    with luaPackages;
    
    let
      libs = [lua cjson luasocket luasec];
    in
    stdenv.mkDerivation rec {
      name = "lua-env";
      buildInputs = libs;
    
      shellHook = ''
        export LUA_CPATH="${lib.concatStringsSep ";" (map getLuaCPath libs)}"
        export LUA_PATH="${lib.concatStringsSep ";" (map getLuaPath libs)}"
      '';
    }
    

    要检查这些路径是否已导出,

    $ nix-shell --run 'echo $LUA_CPATH; echo $LUA_PATH'
    /nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/lib/lua/5.2/?.so;/nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/share/lua/5.2/?.so;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/lib/lua/5.2/?.so;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/share/lua/5.2/?.so;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/lib/lua/5.2/?.so;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/share/lua/5.2/?.so;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/lib/lua/5.2/?.so;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/share/lua/5.2/?.so
    /nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/lib/lua/5.2/?.lua;/nix/store/lp0ns0hjwx1klk6amnyic3f62bw7h8j7-lua-5.2.3/share/lua/5.2/?.lua;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/lib/lua/5.2/?.lua;/nix/store/ppdspfcm5nnfz0fk9zarjmpyv5lcmn18-lua5.2-cjson-2.1.0/share/lua/5.2/?.lua;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/lib/lua/5.2/?.lua;/nix/store/b71xyq7gkc8iccj6wr84zq31gqc3m9ix-lua5.2-socket-3.0-rc1/share/lua/5.2/?.lua;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/lib/lua/5.2/?.lua;/nix/store/6q8xn2bcfskmrfzql47jld5d2irvn5jr-lua5.2-sec-0.6/share/lua/5.2/?.lua
    
    • 5
  2. Lucas
    2020-12-14T05:51:24+08:002020-12-14T05:51:24+08:00

    在 2020 年有一种更简单的方法可以做到这一点:

    nix-shell -p 'lua.withPackages(ps: [ps.luasocket ps.cjson])'
    

    这将lua在您的环境中放置修改后的派生,其中luasocket和cjson派生luaPackages包含在LUA_PATH.

    所以你不需要惹LUA_PATH或shellHooks自己。

    编辑:

    lua.withPackages您也可以在 nix 文件中使用该函数:

    with import <nixpkgs> {};
    stdenv.mkDerivation rec {
      name = "lua-env";
      buildInputs = [ lua.withPackages(ps: with ps; [luasocket luasec cjson ]) ];
    }
    
    • 0

相关问题

  • 如何在 NixOS 上使用 Osm2pgsql 安装 Postgis

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve