Twisted on Windows
btricha at gmail.com
Thu Nov 18 21:55:47 CET 2010
Thanks Jean-Paul, I added the following to my server.py file and
things work perfectly on both Windows and Linux now.
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
>> 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
>> 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,
> is added to sys.path and the foo package can be found. This happens
> 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.
More information about the Python-list