lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


2011/2/27 Sebastien Lai <237482@googlemail.com>:
> Recently I've stumbled upon an annoying, if not strange behaviour regarding
> the behaviour of 'require()'.
> In short, it seems that require() only searches from the directory from the
> script that is being called, for example:
>
> /path/to/somedir/main.lua
> |--> /path/to/somedir/system/
> |----> /path/to/somedir/lib/foo.lua
> |----> /path/to/somedir/lib/stuff.so
> Main.lua being:
>     package.path = package.path .. ";../system/lib/?.lua"
>     require("foo")
> Foo.lua being:
>     require("stuff")
> In this case, the VM will search for "/path/to/somedir/stuff.lua", or
> "/path/to/somedir/stuff.so", but not for
> "/path/to/somedir/system/lib/stuff.so" or
> "/path/to/somedir/system/lib/stuff.lua", as for example Python does.
> That is, Lua does not search the relative path, which makes using organized
> module directories rather tiresome to use...
> It wouldn't be all that terrible if one wouldn't have to explicitly add the
> following to "main.lua":
>      package.cpath = package.cpath .. ";../system/lib/?.so"
> A wake mind will see the problem here: the line has to be modified to match
> the extension for shared libraries on each system.
> I simply do not believe that this is intended, and writing a crossplatform
> version of 'dirname' is trivial, so why is this functionality not part of
> Lua yet?

Because all those trivial functionalities people are asking for would
add up and you would end with a big bloated interpreter. In the
tradeoff between compactness and full-featuredness, Lua is leaning
toward the former, in terms of source code size, compiled size,
external dependencies, memory footprint.

Maybe you should have a look at bigger Lua distributions (LuaDist,
LuaRocks, Lua for Windows, etc.), they may already have solved your
problem.