Twisted on Windows

Bryan Richardson btricha at
Thu Nov 18 21:55:47 CET 2010

Thanks Jean-Paul, I added the following to my 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> wrote:
> On Nov 18, 9:58 am, Bryan Richardson <btri... at> 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
>>    foo/
>> In my file, which is a Twistd config file that can be
>> executed with twistd -ny, I have the following import line:
>> from foo.factory import MyServerFactory
>> When I run 'twistd -ny' 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 file on Windows to just
>> create the factory and start the reactor, I can run it just fine with
>> 'python' 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,
> 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
> --

More information about the Python-list mailing list