[Python-Dev] Relative imports in Py3k (original) (raw)
Ron Adam rrr at ronadam.com
Mon Oct 11 20:01:06 CEST 2010
- Previous message: [Python-Dev] Relative imports in Py3k
- Next message: [Python-Dev] [Python-ideas] minmax() function returning (minimum, maximum) tuple of a sequence
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 10/11/2010 07:27 AM, Nick Coghlan wrote:
On Mon, Oct 11, 2010 at 1:54 AM, anatoly techtonik<techtonik at gmail.com> wrote:
On Sun, Sep 26, 2010 at 2:32 PM, Nick Coghlan<ncoghlan at gmail.com> wrote:
This is almost certainly failing because the directory containing the spyderlib package isn't on sys.path anywhere (instead, whichever directory contains the script you executed directly will be in there, which will be somewhere inside the package instead of outside it). Put the appropriate directory in PYTHONPATH and these tests should start working.
This is a hack. I use relative imports, because I don't want to care about PYTHONPATH issues. I work with two clones of spyderlib (reference point and feature branch). You propose to switch PYTHONPATH every time I want to execute debug code in the main section from either of them. Anatoly, unconstructive responses like this are why people often react negatively to your attempts to be "helpful". I specifically mentioned 2 things you could do: - modify PYTHONPATH - use -m to execute your modules and just switch your current working directory depending on which version of spyderlib you want to execute
I don't recall Anatoly saying which p3k version and revision he was using. Relative imports was broken for while in 3.2. It's fixed now and I presume he is using a fairly current revision of 3.2.
When you do a "make install" for 3.2 on Ubuntu, the current directory path "", isn't perpended to sys.path. I don't know if that is an over site or not, but it could be a factor.
A few more suggestions ...
Make A test runner script which modifies sys.path. It also could be considered a hack, but it doesn't require modifying PYTHONPATH, so it wouldn't have any potential to have side effects on other modules/programs.
One of my personal choices when writing large applications (rather than scripts), is to make a local "lib" directory and prepend that to sys.path in the main application file before any local imports.
# Add a local lib to the search path.
lib = os.path.abspath(os.path.join(__file__, '..', 'lib'))
sys.path.insert(0, lib)
[Appliction dir not in PYthon path]
main_app_file.py
test.py
[lib]
[test package]
... #test modules
... #other local modules and packages
I then add a -test option to the main_app_file.py or a create test.py file at the same level as the main_app_file. The test runner also needs to add lib to sys.path, but after that it can import and find any/all tests you want to run. The test modules can use relative imports as long as they aren't circular.
- The error message in the case of circular imports could be much better!
Cheers, Ron
- Previous message: [Python-Dev] Relative imports in Py3k
- Next message: [Python-Dev] [Python-ideas] minmax() function returning (minimum, maximum) tuple of a sequence
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]