Twisted on Windows

Bryan Richardson btricha at gmail.com
Thu Nov 18 15:55:47 EST 2010


Thanks Jean-Paul, I added the following to my server.py file and
things work perfectly on both Windows and Linux now.

sys.path.insert(0, os.getcwd())

On Thu, Nov 18, 2010 at 9:52 AM, Jean-Paul Calderone
<calderone.jeanpaul at gmail.com> wrote:
> On Nov 18, 9:58 am, Bryan Richardson <btri... at gmail.com> wrote:
>> Hello All,
>>
>> First off I must say that Twisted is a very nice event driven I/O
>> package indeed. Thanks to all the developers who have contributed to
>> it, as it's made my life much easier.
>>
>> Now for my question...
>>
>> I have a custom server application, and I have it structured as such:
>>
>> MyServerApp/ <-- root directory
>>    server.py
>>    foo/
>>       __init__.py
>>       factory.py
>>
>> In my server.py file, which is a Twistd config file that can be
>> executed with twistd -ny server.py, I have the following import line:
>>
>> from foo.factory import MyServerFactory
>>
>> When I run 'twistd -ny server.py' on my Linux machine from within the
>> root MyServerApp directory, all works as expected. However, when I try
>> to do the same thing on a Windows machine using the twistd script that
>> gets installed, I get an error saying that foo.factory cannot be
>> found. However, if I modify my server.py file on Windows to just
>> create the factory and start the reactor, I can run it just fine with
>> 'python server.py' even though it still has the import line for
>> MyServerFactory.
>>
>> Bottom line is, on Windows, the python executable can find my custom
>> module in a sub directory but the twistd script cannot. Any ideas why
>> this is?
>>
>
> When you run a .py file, python adds the directory containing that .py
> file to the front of sys.path.  So when you run server.py,
> MyServerApp/
> is added to sys.path and the foo package can be found.  This happens
> on
> Linux and Windows.
>
> When you run twistd, the ".py file" you're running is /usr/bin/twistd
> or C:\Python26\Scripts\twistd or something else along those lines.  So
> Python adds /usr/bin or C:\Python26\Scripts to sys.path.  This doesn't
> help you find the foo package at all.
>
> On Linux, when not running as root, twistd adds the current working
> directory to sys.path.  So if your working directory is MyServerApp,
> then the foo package can be found.
>
> When running as root, or when running on Windows, twistd does not add
> the working directory to sys.path.
>
> So with all that in mind, the solution should be pretty clear - just
> set PYTHONPATH to include MyServerApp.
>
> This variation of twistd behavior is pretty confusing, and I think a
> future version may drop the sys.path manipulation entirely, so that
> it behaves consistently in all configurations.
>
> Jean-Paul
> --
> http://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list