Changing script's search path at install time

sohcahtoa82 at gmail.com sohcahtoa82 at gmail.com
Fri Dec 19 21:18:29 EST 2014


On Friday, December 19, 2014 6:00:15 PM UTC-8, Mitko Haralanov wrote:
> Hi all,
> 
> 
> I have a question regarding installation of Python scripts and modules using distutils that I can't find an answer to by searching through Google and the Python website. Hopefully, someone on this list might have ideas?
> 
> 
> I am writing a Python app, which I would eventually like to install using disutils. The app has the current tree strucutre:
> 
> 
> <root>
>   |----- myapp.py
>   |----- modules/
>                |------  lib/
>                          |------  __init__.py
>                          |------  mymodule1.py
>                          |------  mymdule2.py
>                |------- cmds/
>                          |------  __init__.py
>                          |------  cmds1.py
> 
> 
> Naturally, in order for my app to properly import the modules, currently it uses the following code:
> 
> 
>     import modules.lib.mymodule1
>     import modules.lib.mymodule2
>     import modules.cmds.cmds1
> 
> 
> However, when the app gets installed, I would like to install the modules to /usr/lib64/pythonX.Y/site-packages/myapp. I know that I can do this by using the "package_dir" argument to the "setup()" function in distutils.core.
> 
> 
> To make development easier I would like to be able to run the myapp.py script from the development directory, which means that the import statements have to remain as they are. The issue is that when the script is installed, the import statements will not work anymore since the directory name has been changed from "modules" to "myapp".
> 
> 
> My problem is that I can't figure out how to modify the myapp.py script to switch from "modules.lib.mymodule1" to "myapp.lib.module1" at install time. Does anyone have any useful hints?
> 
> 
> Thank you,
> - Mitko

Don't call that subdirectory "modules".  Call it "myappmodules" or something like that.  The modules would then be installed in /usr/lib64/pythonX.y/site-packages/myappmodules

I'm sure there's a work-around that would let you refer to them by different names based on whether or not the script is being run from your development directory, but it would probably be a Bad Idea and could easily break on some peoples' systems.

Alternatively, you could decide if you really need those modules to be installed as stand-alone modules in the site-packages directory.  Are users going to be importing those modules into their own scripts?



More information about the Python-list mailing list