0
votes

Comment installer des modules sur Luajit à l'aide de Luarocks

J'ai réussi à installer luasocket et fonctionne correctement en utilisant lua5.3 mais je ne trouve pas le moyen de les installer pour exiger de luajit.

Si j'écris print (_VERSION), cela montre que luajit utilise lua5.1.

Voici ce que j'ai essayé:

$ luajit
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
JIT: ON ARMv7 VFPv3 fold cse dce fwd dse narrow loop abc sink fuse
> sock = require("socket")
stdin:1: module 'socket' not found:
        no field package.preload['socket']
        no file './socket.lua'
        no file '/data/data/com.termux/files/usr/share/luajit-2.1.0-beta3/socket.lua'
        no file '/usr/local/share/lua/5.1/socket.lua'
        no file '/usr/local/share/lua/5.1/socket/init.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket/init.lua'
        no file './socket.so'
        no file '/usr/local/lib/lua/5.1/socket.so'
        no file '/data/data/com.termux/files/usr/lib/lua/5.1/socket.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
        [C]: in function 'require'
        stdin:1: in main chunk
        [C]: at 0xaba4406d

L'erreur:

luarocks install luasocket

luarocks --local install luasocket

luarocks --lua-version 5.1 install luasocket

luarocks --lua-version 5.1 --local install luasocket

luarocks config lua_version 5.1

luarocks install luasocket

sock = require("/data/data/com.termux/files/home/.luarocks/lib/luarocks/rocks-5.1/socket")

package.path = package.path .. ";/data/data/com.termux/files/home/.luarocks/lib/luarocks/rocks-5.1" require "socket"

package.path = package.path .. ";/data/data/com.termux/files/home/.luarocks/lib/lua/5.1" require "socket"

...

J'ai essayé de déplacer les fichiers installés vers certains de ces chemins mais ne fonctionne toujours pas.


0 commentaires

3 Réponses :


0
votes
luarocks --lua-version 5.1 install luasocket
is the proper way to install it.That should also tell you in the last line of output where it installed the module, so you can check if that's in your package.path.It seems you just misunderstand how package.path works. From the manual:
A path is a string containing a sequence of templates separated by semicolons. For each template, the function replaces each interrogation mark (if any) in the template with a copy of name wherein all occurrences of sep (a dot, by default) were replaced by rep (the system's directory separator, by default), and then tries to open the resulting file name.
What that means is that a path like /usr/share/lua/5.1 won't find anything, because it doesn't find a valid Lua file at that path and since there's no ?, no substitution is done whatsoever. The first of the two paths is OK, but many Lua modules use a file called init.lua instead, so for every <path>/?.lua you should always also add a <path>/?/init.lua to cover that option as well.Normally Luarocks should install the packages main Lua file at /usr/local/share/lua/5.1/socket.lua, but for your case that doesn't seem to work. You can have a look at that directory and see if the file is there at all, and check that luarocks config deploy_lua_dir actually returns /usr/local/share/lua/5.1.

5 commentaires

J'ajoute le chemin avant require et j'obtiens: ... com.termux / files / home / .luarocks / share / lua / 5.1 / socket.lua: ‌ 12: module 'socket.core' introuvable: pas de package de champ. preload ['socket.core'] pas de fichier '/data/data/com.termux/files/home/.luarocks/share/lua/5.1/so‌ cket / core.lua'


Essayez luarocks list --lua-version 5.1 socket , qui vous dira dans quel arbre il est installé


J'ai tout essayé. Il en va de même pour les modules du dossier actuel. Je ne trouve pas de moyen de faire en sorte que l'exigence ne soit pas inutile. io.read fonctionne bien. Maintenant, j'ai essayé d'inclure un fichier dans un sous-dossier d'un projet et de nouveau bloqué. J'ai même essayé d'utiliser os.execute ("pwd> currentpath"), lu ce fichier et ajouter le chemin à package.path. Continuez à dire que vous ne trouvez pas le module.


lua5.3: server.lua: 36: module '/data/data/com.termux/files/home/storage/downloads/SERVER/s‌ ervices / lua / config / s‌ tatic_headers.config‌' introuvable. Ceci est le chemin complet et le fichier existe évidemment. Je peux chatter le fichier en utilisant ce chemin.


Ah, je viens de remarquer quelque chose à propos de votre code. Mettre à jour ma réponse maintenant @StringManolo



0
votes

socket.lua a été installé dans un répertoire qui n'existe pas dans votre LUA_PATH

trouver où socket.lua a été installé, avec find ou mlocate, si installé:

ln -s /usr/share/lua/5.1/socket.lua /usr/local/share/lua/5.1/socket.lua

~/.luaver/luarocks/3.2.0_5.1/share/lua/5.1/socket.lua
~/.luaver/luarocks/3.2.0_5.3/share/lua/5.3/socket.lua
/usr/share/lua/5.1/socket.lua
/usr/share/lua/5.2/socket.lua
/usr/share/lua/5.3/socket.lua

éditez votre .bashrc - en supposant un shell bash ici, mais d'autres suivent un processus similaire. faites votre choix et modifiez en conséquence https://wiki.termux.com/wiki/Shells

trouver la ligne qui dit export LUA_PATH='/usr/local/share/lua/5.1/?.lua;yadda-yadda

ajoutez un point-virgule plus le (s) chemin (s) que vous avez trouvé (s) ci-dessus.

export LUA_PATH='/usr/local/share/lua/5.1/?.lua;/usr/share/lua/5.1'

fermez tous les terminaux ouverts, puis ouvrez-en un nouveau, maintenant que ce nouveau chemin est activé.


vous pouvez également utiliser des liens logiciels.

find / -name socket.lua 2>&1 | grep -v Perm

sudo updatedb  &&  locate socket.lua

Je ne suis pas fan de cette méthode de softlink secondaire, car vous devriez le faire pour chaque module Lua qui réside en dehors de votre chemin, mais je l'inclus afin que vous connaissiez vos options. Si ce n'est que pour ce module particulier, ce serait une solution acceptable, car il fait ce que vous avez décidé de faire. Cependant, à l'avenir, lorsque vous rencontrez le même problème avec d'autres modules, vous devrez également répéter le processus pour ceux-ci. La modification de LUA_PATH est votre meilleur pari.


4 commentaires

find / -name socket.lua 2> & 1 | grep -v Perm sudo mis à jourb && localisez socket.lua ces commandes ne retournent rien. Quoi qu'il en soit, je sais où est installé. J'ai essayé de copier tous les chemins que luajit recherche et ne fonctionne pas.


Ne copiez pas tous les chemins que Lua recherche déjà - c'est redondant. Ajoutez simplement le chemin où réside socket.lua. Vous avez probablement décimé son installation en essayant de déplacer ce module vers un autre répertoire. luarocks remove luasocket et toutes les autres instances de socket.lua, dont vous aurez besoin pour apprendre à utiliser find ou locate pour découvrir, puis réinstallez luasocket.


Avec LUA_PATH vous pouvez utiliser un double point-virgule ;; et Lua y insérera simplement le chemin par défaut.


Ce n'est pas le problème. StringManolo a déjà déclaré dans la question d'origine que stdin:1: module 'socket' not found: puis une liste de tous les emplacements par défaut dans lesquels il recherche.



0
votes

Voici la chose, vous avez déclaré:

"J'ajoute le chemin et j'obtiens: /data/data/com.termux/files/home/.luarocks/share/lua/5.1/ module socket.lua 'socket.core' introuvable ..."

C'est parce que socket.lua existe dans ce répertoire, mais vous avez déplacé son sous-répertoire:

/data/data/com.termux/files/home/.luarocks/share/lua/5.1/ socket / core.lua

Ainsi, ce répertoire ne fera plus rien pour vous jusqu'à ce que vous le supprimiez et recommençiez.

ln -s /usr/local/lib/lua/5.1/socket.lua /usr/local/lib/lua/5.1/socket.so

Maintenant, regardez attentivement pendant son installation, pour voir dans quel répertoire il s'installe réellement, ou utilisez la commande find que j'ai mentionnée plus tôt pour localiser l'emplacement de votre socket compatible Lua5.1 et l'ajouter à votre LUA_PATH .

> sock = require("socket")
stdin:1: module 'socket' not found:
        no field package.preload['socket']
        no file './socket.lua'
        no file '/data/data/com.termux/files/usr/share/luajit-2.1.0-beta3/socket.lua'
        no file '/usr/local/share/lua/5.1/socket.lua'
        no file '/usr/local/share/lua/5.1/socket/init.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket.lua'
        no file '/data/data/com.termux/files/usr/share/lua/5.1/socket/init.lua'
        no file './socket.so'
        no file '/usr/local/lib/lua/5.1/socket.so'
        no file '/data/data/com.termux/files/usr/lib/lua/5.1/socket.so'
        no file '/usr/local/lib/lua/5.1/loadall.so'

Vous n'avez pas besoin d'ajouter ces répertoires à votre LUA_PATH car ils sont déjà recherchés

sudo apt install mlocate  &&  sudo updatedb  &&  locate socket.lua

;; ne fera rien parce que vous avez déjà souligné qu'il ne réside dans aucun de ces répertoires par défaut.

Il est possible qu'il recherche le bon répertoire, mais la mauvaise extension.

/usr/local/lib/lua/5.1/socket. donc
par opposition à /usr/local/lib/lua/5.1/socket. lua

dans ce cas, utilisez la méthode softlink que j'ai mentionnée plus tôt, en veillant à utiliser l'emplacement correct, ce n'est qu'un exemple:

rm /data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket.lua
rm -rf /data/data/com.termux/files/home/.luarocks/share/lua/5.1/socket/

luarocks --lua-version 5.1 install luasocket


1 commentaires

Je pense que c'est un bogue core.lua dans la version luasocket 5.1.