Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Package that imports with name of dependent package

Reply
Thread Tools

Package that imports with name of dependent package

 
 
David Pratt
Guest
Posts: n/a
 
      05-13-2006
Hi. I have code that currently depends on a particular package of a
framework. I have decided I want to create my own package because I have
made many changes and it is getting too difficult to maintain each time
I retrieve an updated version of the framework from svn.

The problem is, that there are all sorts of imports to the dependent
package throughout my code and I just want to replace this module with
something that will provide a reference to my own package without
changing the original imports. So it just needs to point to the new
package so that the original imports in my code will continue to work.

For example, here is a package structure.

dependentpackage
|
+---- __init__.py
+---- somemodule.py
+---- somefolder
|
+---- __init__.py
+---- somesubmodule.py
+---- someotherfolder
etc ....

I simply want the dependentpackage to point to the new package leaving
no more than an init file or whatever would have to be minimally
required to make this work

dependentpackage
|
+---- __init__.py

mypackage
|
+---- __init__.py
+---- somemodule.py
+---- somefolder
|
+---- __init__.py
+---- somesubmodule.py
+---- someotherfolder
etc ....

I my code I still need to have this work:

from dependentpackage.somemodule import something

- but I want the package to be getting the code from the new module.

I'd appreciate hearing of what I can do in an __init__ file or what
other strategy could make this work. Many thanks.

Regards,
David

 
Reply With Quote
 
 
 
 
Peter Otten
Guest
Posts: n/a
 
      05-13-2006
David Pratt wrote:

> Hi. I have code that currently depends on a particular package of a
> framework. I have decided I want to create my own package because I have
> made many changes and it is getting too difficult to maintain each time
> I retrieve an updated version of the framework from svn.
>
> The problem is, that there are all sorts of imports to the dependent
> package throughout my code and I just want to replace this module with
> something that will provide a reference to my own package without
> changing the original imports. So it just needs to point to the new
> package so that the original imports in my code will continue to work.
>
> For example, here is a package structure.
>
> dependentpackage
> |
> +---- __init__.py
> +---- somemodule.py
> +---- somefolder
> |
> +---- __init__.py
> +---- somesubmodule.py
> +---- someotherfolder
> etc ....
>
> I simply want the dependentpackage to point to the new package leaving
> no more than an init file or whatever would have to be minimally
> required to make this work
>
> dependentpackage
> |
> +---- __init__.py
>
> mypackage
> |
> +---- __init__.py
> +---- somemodule.py
> +---- somefolder
> |
> +---- __init__.py
> +---- somesubmodule.py
> +---- someotherfolder
> etc ....
>
> I my code I still need to have this work:
>
> from dependentpackage.somemodule import something
>
> - but I want the package to be getting the code from the new module.
>
> I'd appreciate hearing of what I can do in an __init__ file or what
> other strategy could make this work. Many thanks.


I think fixing the imports is the better long-term approach. But putting

from pkgutil import extend_path
import mypackage
__path__ = extend_path(mypackage.__path__, __name__)

into dependentpackage/__init__.py might work.

Peter



 
Reply With Quote
 
 
 
 
Peter Otten
Guest
Posts: n/a
 
      05-13-2006
Peter Otten wrote:

>> I'd appreciate hearing of what I can do in an __init__ file or what
>> other strategy could make this work. Many thanks.

>
> I think fixing the imports is the better long-term approach. But putting
>
> from pkgutil import extend_path
> import mypackage
> __path__ = extend_path(mypackage.__path__, __name__)
>
> into dependentpackage/__init__.py might work.


One big caveat: If you are mixing both

import mypackage.somemodule

and

import dependentpackage.somemodule

in the same application, mypackage.somemodule and
dependentpackage.somemodule are *not* the same module instance. This may
have surprising effects when global variables in somemodule.py are
updated...

Peter
 
Reply With Quote
 
David Pratt
Guest
Posts: n/a
 
      05-13-2006
Hi Peter. I'd like to fix the imports, but this would impact the
portability of portions of the code that currently work with the
existing package from the framework.

This solution does the trick and allows me to create the package I want
using a good amount of new material. I don't have to worry about adding
to the original package each time a release comes out. I'll only have to
monitor code changes for an impact on my classes, subclasses, etc. Still
a pain, but a smaller one Many thanks.

Regards
David


Peter Otten wrote:
> from pkgutil import extend_path
> import mypackage
> __path__ = extend_path(mypackage.__path__, __name__)
>
> into dependentpackage/__init__.py might work.
>
> Peter
>
>
>

 
Reply With Quote
 
David Pratt
Guest
Posts: n/a
 
      05-13-2006
Hi Peter. Thank you for this warning. I'll document this in the code. I
plan on importing only from dependentpackage for portability. Also, much
in the framework relies upon it. This approach is primarily for
maintenance purposes and would also allow me to package the modified
dependentpackage (with just the __init__.py ) along with mypackage if I
plan to distribute it. It allows it to be a drop in replacement.

I am hoping with packaging utilities, I can easily remove the
dependentpackage if it is encountered in site-packages to replace it
with my own.

Regards,
David


Peter Otten wrote:
> Peter Otten wrote:
>
>>> I'd appreciate hearing of what I can do in an __init__ file or what
>>> other strategy could make this work. Many thanks.

>> I think fixing the imports is the better long-term approach. But putting
>>
>> from pkgutil import extend_path
>> import mypackage
>> __path__ = extend_path(mypackage.__path__, __name__)
>>
>> into dependentpackage/__init__.py might work.

>
> One big caveat: If you are mixing both
>
> import mypackage.somemodule
>
> and
>
> import dependentpackage.somemodule
>
> in the same application, mypackage.somemodule and
> dependentpackage.somemodule are *not* the same module instance. This may
> have surprising effects when global variables in somemodule.py are
> updated...
>
> Peter

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
problem in running a basic code in python 3.3.0 that includes HTML file Satabdi Mukherjee Python 1 04-04-2013 07:48 PM
Dynamic imports + relative imports in Python 3 zildjohn01 Python 0 02-22-2011 05:24 PM
non-dependent vs. dependent template names puzzlecracker C++ 1 08-07-2008 07:42 AM
Imports System.Data or Imports System.Data.SqlClient? Albert ASP .Net 4 07-10-2008 09:00 AM
How do I write HTML tags for an applet that imports classes from another jar in another package? Ding Java 1 07-01-2004 03:41 AM



Advertisments