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.
3 Réponses :
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.
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
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.
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.
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
Je pense que c'est un bogue core.lua dans la version luasocket 5.1.