Hello, I need to include lua-modules from different directories, but package.path does not seem to work: \startbuffer[test] bla = nil \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") \stopluacode \stoptext Error message: ! LuaTeX error <main ctx instance>:3: module 'mytest' not found: TIA for any help! Cheer, Peter -- Contact information: http://pmrb.free.fr/contact/
On Tue, May 04 2010, Peter Münster wrote:
package.path = "../?.lua;;"
Ok, I see, the paths must be separated by colons: package.path = "path1/?.lua:path2/?.lua" But it's not very comfortable, since some of my luafiles are processed by lua¹ *and* by context². ¹ To generate code. ² To generate documentation. But ok, shouldn't be a too big problem... ;) Cheers, Peter -- Contact information: http://pmrb.free.fr/contact/
On 4-5-2010 10:28, Peter Münster wrote:
Hello,
I need to include lua-modules from different directories, but package.path does not seem to work:
\startbuffer[test] bla = nil \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") \stopluacode \stoptext
dofile "../mytest.lua" ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
On Thu, May 06 2010, Hans Hagen wrote:
\startbuffer[test] bla = nil \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") \stopluacode \stoptext
dofile "../mytest.lua"
Bad example... mytest.lua is a module, so it must be loaded with require: \startbuffer[test] module(...) \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") -- dofile("../mytest.lua") -- this does not work \stopluacode \stoptext Cheers, Peter -- Contact information: http://pmrb.free.fr/contact/
On 7-5-2010 9:15, Peter Münster wrote:
On Thu, May 06 2010, Hans Hagen wrote:
\startbuffer[test] bla = nil \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") \stopluacode \stoptext
dofile "../mytest.lua"
Bad example...
mytest.lua is a module, so it must be loaded with require:
\startbuffer[test] module(...) \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") -- dofile("../mytest.lua") -- this does not work \stopluacode \stoptext
package.append_libpath(...) ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Peter Münster wrote:
On Thu, May 06 2010, Hans Hagen wrote:
\startbuffer[test] bla = nil \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") \stopluacode \stoptext dofile "../mytest.lua"
Bad example...
mytest.lua is a module, so it must be loaded with require:
You cannot always replace 'require' with 'dofile', and for this reason it is important that package.path actually works as explained in the lua manual. (escrito had similar problems, and other external lua modules will run into it as well). Best wishes, Taco
On 7-5-2010 10:52, Taco Hoekwater wrote:
Peter Münster wrote:
On Thu, May 06 2010, Hans Hagen wrote:
\startbuffer[test] bla = nil \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") \stopluacode \stoptext dofile "../mytest.lua"
Bad example...
mytest.lua is a module, so it must be loaded with require:
You cannot always replace 'require' with 'dofile', and for this reason it is important that package.path actually works as explained in the lua manual. (escrito had similar problems, and other external lua modules will run into it as well).
well, package path is supported (as is cpath) so it's more a question of why that paths fails .. maybe we need to explicitly assume ";" instead of the platform separator (tests on my machine work ok as windows has ; as separator) you can test this with adding an explcit ";" to libpaths = file.split_path(_path_,";") in data-lua.lua Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Hans Hagen wrote:
On 7-5-2010 10:52, Taco Hoekwater wrote:
Peter Münster wrote:
On Thu, May 06 2010, Hans Hagen wrote:
\startbuffer[test] bla = nil \stopbuffer \savebuffer[test][../mytest.lua] \starttext \startluacode package.path = "../?.lua;;" require("mytest") \stopluacode \stoptext dofile "../mytest.lua"
Bad example...
mytest.lua is a module, so it must be loaded with require:
You cannot always replace 'require' with 'dofile', and for this reason it is important that package.path actually works as explained in the lua manual. (escrito had similar problems, and other external lua modules will run into it as well).
well, package path is supported (as is cpath) so it's more a question of why that paths fails .. maybe we need to explicitly assume ";" instead of the platform separator (tests on my machine work ok as windows has ; as separator)
you can test this with adding an explcit ";" to
libpaths = file.split_path(_path_,";")
in data-lua.lua
For me on linux, this change should make it work (package.path indeed contains semicolons). However, require() is still broken: ! LuaTeX error /opt/tex/texmf-local/tex/context/base/l-file.lua:133: bad argument #1 to 'gsub' (string expected, got nil) stack traceback: [C]: in function 'gsub' /opt/tex/texmf-local/tex/context/base/l-file.lua:133: in function 'split_path' /opt/tex/texmf-local/tex/context/base/data-lua.lua:36: in function 'clibpaths' /opt/tex/texmf-local/tex/context/base/data-lua.lua:97: in function [C]: in function 'require' <main ctx instance>:2: in main chunk. }inserted text> ...equire('testmodule') -- fails \dodostartluacode ...d \directlua \zerocount {#1}} l.5 \stopluacode Test files are attached. The definition of package.libpaths I used: function package.libpaths() print (_path_, package.path) if not _path_ or package.path ~= _path_ then _path_ = package.path libpaths = file.split_path(_path_,';') print (table.serialize(libpaths)) end return libpaths end And it prints out: nil ./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua t={ "./?.lua", "/usr/local/share/lua/5.1/?.lua", "/usr/local/share/lua/5.1/?/init.lua", "/usr/local/lib/lua/5.1/?.lua", "/usr/local/lib/lua/5.1/?/init.lua", } But it looks like mkiv is not happy with the split path, as it goes on trying clibpaths(). Also, I ran into another problem: if the module has the same name as the base input file, package.libpaths is not called at all (initially the module was called 'tryme.lua'). Best wishes, Taco module 'testmodule' return {}
participants (3)
-
Hans Hagen
-
Peter Münster
-
Taco Hoekwater