My employer has a dedicated module1 we use for internal unit / system test; however, the author of this module no longer works here and I have been asked to test some devices with it.
The problem is that pyfoo
requires an ancient version of twisted
(v8.2.0) and it imports twisted
in 33 different files. I tried running pyfoo
's unit tests under v11.0.0 and I don't even see TCP SYN packets2. Unfortunately, I have already got twisted v11.0.0 installed on my lab linux server and I have my own code that depends on it.
I have been wracking my brain for a way around this, but I can only come up with the following options:
Option A. Install a new version of python, install virtualenv
, and then install an old version of twisted
under the virtualenv
. Only run the tests requiring pyfoo
under this new version of python.
Option B. Edit all 33 of the files with the following: DIR = '../'; sys.path.insert(0, DIR)
and install the old version of python in the appropriate directory below the source.
Option C. Attempt to fix pyfoo
to use v11.0.03
Are there any options I am missing? Is there a more elegant way to solve this problem, besides Option A, above?
END-NOTES:
- Let's call it
pyfoo
for sake of argument - The unit tests connect to one of our local lab servers and exercises basic telnet functionality
- This option is almost a non-starter...
pyfoo
is not trivial, and I have a short deadline for this work.
A better version of option B. would be to replace
by
which will arrange for the correct version of twisted to be imported, so long as it's installed, and raises an exception otherwise. This is a more portable solution.
This won't work, though (nor would any other variaton of option B), if twisted gets imported before the
pkg_resources.require
gets called;twisted
will already be insys.modules
OP Edit: Minor syntax correction, per
pkg_resources
docsI can't tell you what is best in your situation, but you might be able to consider:
Option D: run it in a virtual machine (eg. with Windows 7)
Option E: install old version of python/twisted on another machine
If SingleNegationElimination's solution doesn't work, be aware that you don't need to replace all 33 instances of the import; you only need to modify
sys.path
at the entry points; e.g. you could target just your module's__init__.py
files.There you would insert e.g.