Tro wrote: > On Monday 03 March 2008, [EMAIL PROTECTED] wrote: >> On Mar 3, 5:09 pm, Tro <[EMAIL PROTECTED]> wrote: >>> On Sunday 02 March 2008, Paul McGuire wrote: >>>> On Mar 2, 3:48 pm, Tro <[EMAIL PROTECTED]> wrote: >>>>> On Sunday 02 March 2008, Terry Reedy wrote: >>>>>> "Tro" <[EMAIL PROTECTED]> wrote in message >>>>>> news:[EMAIL PROTECTED] >>>>>> >>>>>> | Hi, list. >>>>>> | >>>>>> | I've got a simple asyncore-based server. However, I've modified >>>>>> | the >>>>>> >>>>>> asyncore >>>>>> >>>>>> | module to allow me to watch functions as well as sockets. The >>>>>> | modified asyncore module is in a specific location in my project >>>>>> | and is imported >>>>>> >>>>>> as >>>>>> >>>>>> | usual from my classes. >>>>>> | >>>>>> | Now I'd like to use the tlslite library, which includes an >>>>>> | asyncore mixin class. However, tlslite imports "asyncore", which >>>>>> | doesn't include my own modifications. >>>>>> | >>>>>> | I'd like to know if it's possible to make tlslite load *my* >>>>>> | asyncore >>>>>> >>>>>> module >>>>>> >>>>>> | without changing any of the tlslite code. >>>>>> >>>>>> If your module is also 'asyncore' and comes earlier in the search >>>>>> path, I would expect the import to get yours. >>>>> It's not. It has a package prefix like my.package.asyncore. I think I >>>>> can either move my version of asyncore up a couple of levels or add >>>>> the my.package directory to sys.path. >>>>> >>>>> My version of asyncore imports several functions from the built-in >>>>> asyncore. Now that my version of it is imported as asyncore, how >>>>> would it import the built-in version from python2.5/site-packages? >>>>> >>>>> Thanks, >>>>> Tro >>>> What happens if you do "import my.package.asyncore as asyncore"? >>>> >>>> If that doesn't work (trying the simplest hack first), I know that >>>> there are various hooks in the import mechanism that should help. >>> In the classes that use my version of asyncore currently, that is how I >>> do it. I import my version as "import my.package.asyncore as asyncore". >>> In my asyncore module I do "import asyncore", because I override a few >>> functions from the asyncore module included with python. However, if I >>> were to add "my.package" to sys.path, then I wouldn't be able to "import >>> asyncore" from my own asyncore module. I'd have to do some trickery with >>> sys.path to take the "my.package" component out, import standard >>> asyncore, readd the "my.package" component, so that other modules can >>> "import asyncore" and get my version. >>> >>> Is there a way to import the standard python asyncore module in this >>> scenario? >>> >>> Thanks, >>> Tro >>> >>> >> Are you trying to interfere with the default module on only your >> machine? Just rename it. If something in the std. lib. imports >> asyncore, they get yours too that way. > > No, I'd like it to be a generalized solution and only for this one project. > I'm trying to get it to work on any recent python installation out of the > box, so I can't rename built-in modules. What I'm trying to do is allow a 3rd > party module (tlslite) to import *my* version of asyncore without me going > into tlslite's code and changing its import statement explicitly, but only > for the scope of this one project. >
In that case try something like import myasyncore as asnycore sys.modules['asyncore'] = asyncore import tlslite regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 Holden Web LLC http://www.holdenweb.com/ -- http://mail.python.org/mailman/listinfo/python-list