From: Csaba N. <nc...@gm...> - 2015-06-16 22:05:29
Attachments:
get_config.patch
|
Hi Werner, This is a continuation of the discussion I started on the general list, about how to make it easier to install free-cad extensions coming as external python modules installed via pip or setup-tools. I cited below the relevant section of my former mail. I actually had a look at the free-cad code, and it is not that hard to add some new options to get FreeCADCmd output the relevant path where modules/macros need to be installed - see attached patch (done against git master branch head). That can be used by external python packages to add the macros/modules at installation time. With that patch applied I can do: > FreeCADCmd --help ... Generic options: -v [ --version ] Prints version string -h [ --help ] Prints help message -c [ --console ] Starts in console mode --response-file arg Can be specified with '@name', too --dump-config Dumps configuration --get-config arg Prints the value of the requested configuration key > FreeCADCmd --dump-config [see command output at the mail end] > FreeCADCmd --get-config UserAppData /home/csaba/.FreeCAD/ > FreeCADCmd --get-config AppHomePath /home/csaba/deploy/freecad/ One can use this then to install the macros/modules of an external module automatically when the python package is installed. The package post-install hook can query the free-cad executable it finds on the path where the macro/modules directory lives, and can use it to copy the needed files there. This is not 100% fool proof, but it will work 99% of the time. I would be happy to get any feedback if it would be interesting for the free-cad project if I create a template python plugin project others can reuse for their own free-cad extensions, to make extensions as easy to install as "pip install extension-name" (or run setup.py). Cheers, Csaba On So, 2015-06-14 at 23:35 +0200, Csaba Nagy wrote: > It's not enough to distribute the macro code, you actually need to make > sure it is on the python path, and the easiest way to achieve that is to > package it in an external (to free-cad) module. > > BTW, is there a cross-platform way to find the free-cad macro directory > at python package installation time ? If the external package could copy > it's macro/module files at installation time in the right directory, > that would make distributing free-cad extensions a lot easier ! > > What about a simple "freecad-config" utility or so, which can be run to > figure out where to put the macros/modules ? That could be used in a > post-installation step when installing with from sources/pip, a la: > > https://github.com/ncsaba/python-brlcad/blob/master/setup.py#L128 > > The python-brlcad code is dynamically searching for a BRL-CAD > installation (which actually has a brlcad-config utility) and wrapping > it using ctypesgen, but the same infrastructure of post-install hooks > could be used to put free-cad extensions in the right macro directory, > in a cross-platform way. Output of "FreeCADCmd --dump-config" on my box: AppDataSkipVendor=true AppHomePath=/home/csaba/deploy/freecad/ BinPath=/home/csaba/deploy/freecad/bin/ BuildRepositoryURL=git://git.code.sf.net/p/free-cad/code master BuildRevision=5096 (Git) BuildRevisionBranch=master BuildRevisionDate=2015/06/13 10:48:21 BuildRevisionHash=d0d98b87751f4e5308916f509b72f14053caa61e BuildVersionMajor=0 BuildVersionMinor=16 CopyrightInfo=(c) Juergen Riegel, Werner Mayer, Yorik van Havre 2001-2015 ##### #### ### #### # # # # # # # ## #### #### # # # # # #### # # # # # # # ##### # # # # #### #### # # # # # # # # # # # # # # ## ## ## # # #### #### ### # # #### ## ## ## Debug=0 DocPath=/home/csaba/deploy/freecad/doc/ ExeName=FreeCAD ExeVendor=FreeCAD ExeVersion=0.16 PythonSearchPath=/usr/lib/python2.7/:/usr/lib/python2.7/plat-i386-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload RunMode=Exit UserAppData=/home/csaba/.FreeCAD/ UserHomePath=/home/csaba |
From: Werner (GMX) <wer...@gm...> - 2015-07-02 08:56:15
|
Hi Csaba, I see no problem in applying this patch. Thanks, Werner Am 17.06.2015 um 00:05 schrieb Csaba Nagy: > Hi Werner, > > This is a continuation of the discussion I started on the general list, > about how to make it easier to install free-cad extensions coming as > external python modules installed via pip or setup-tools. > > I cited below the relevant section of my former mail. I actually had a > look at the free-cad code, and it is not that hard to add some new > options to get FreeCADCmd output the relevant path where modules/macros > need to be installed - see attached patch (done against git master > branch head). That can be used by external python packages to add the > macros/modules at installation time. > > With that patch applied I can do: > >> FreeCADCmd --help > ... > Generic options: > -v [ --version ] Prints version string > -h [ --help ] Prints help message > -c [ --console ] Starts in console mode > --response-file arg Can be specified with '@name', too > --dump-config Dumps configuration > --get-config arg Prints the value of the requested configuration > key > >> FreeCADCmd --dump-config > [see command output at the mail end] > >> FreeCADCmd --get-config UserAppData > /home/csaba/.FreeCAD/ > >> FreeCADCmd --get-config AppHomePath > /home/csaba/deploy/freecad/ > > One can use this then to install the macros/modules of an external > module automatically when the python package is installed. The package > post-install hook can query the free-cad executable it finds on the path > where the macro/modules directory lives, and can use it to copy the > needed files there. This is not 100% fool proof, but it will work 99% of > the time. > > I would be happy to get any feedback if it would be interesting for the > free-cad project if I create a template python plugin project others can > reuse for their own free-cad extensions, to make extensions as easy to > install as "pip install extension-name" (or run setup.py). > > Cheers, > Csaba > > > On So, 2015-06-14 at 23:35 +0200, Csaba Nagy wrote: >> It's not enough to distribute the macro code, you actually need to make >> sure it is on the python path, and the easiest way to achieve that is to >> package it in an external (to free-cad) module. >> >> BTW, is there a cross-platform way to find the free-cad macro directory >> at python package installation time ? If the external package could copy >> it's macro/module files at installation time in the right directory, >> that would make distributing free-cad extensions a lot easier ! >> >> What about a simple "freecad-config" utility or so, which can be run to >> figure out where to put the macros/modules ? That could be used in a >> post-installation step when installing with from sources/pip, a la: >> >> https://github.com/ncsaba/python-brlcad/blob/master/setup.py#L128 >> >> The python-brlcad code is dynamically searching for a BRL-CAD >> installation (which actually has a brlcad-config utility) and wrapping >> it using ctypesgen, but the same infrastructure of post-install hooks >> could be used to put free-cad extensions in the right macro directory, >> in a cross-platform way. > > Output of "FreeCADCmd --dump-config" on my box: > > AppDataSkipVendor=true > AppHomePath=/home/csaba/deploy/freecad/ > BinPath=/home/csaba/deploy/freecad/bin/ > BuildRepositoryURL=git://git.code.sf.net/p/free-cad/code master > BuildRevision=5096 (Git) > BuildRevisionBranch=master > BuildRevisionDate=2015/06/13 10:48:21 > BuildRevisionHash=d0d98b87751f4e5308916f509b72f14053caa61e > BuildVersionMajor=0 > BuildVersionMinor=16 > CopyrightInfo=(c) Juergen Riegel, Werner Mayer, Yorik van Havre > 2001-2015 > ##### #### ### #### > # # # # # # > # ## #### #### # # # # # > #### # # # # # # # ##### # # > # # #### #### # # # # # > # # # # # # # # # ## ## ## > # # #### #### ### # # #### ## ## ## > > > Debug=0 > DocPath=/home/csaba/deploy/freecad/doc/ > ExeName=FreeCAD > ExeVendor=FreeCAD > ExeVersion=0.16 > PythonSearchPath=/usr/lib/python2.7/:/usr/lib/python2.7/plat-i386-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload > RunMode=Exit > UserAppData=/home/csaba/.FreeCAD/ > UserHomePath=/home/csaba > |