Re: problem with packages and path

2008-08-29 Thread Daniel
On Aug 28, 2:28 am, Marco Bizzarri [EMAIL PROTECTED] wrote:
 On Wed, Aug 27, 2008 at 6:44 PM, Daniel [EMAIL PROTECTED] wrote:
  Hello,

  I'm writing some unit tests for my python software which uses
  packages.  Here is the basic structure:

  mypackage
   __init__.py
   module1
     __init__.py
     mod1.py
   module2
     __init__.py
     mod2.py
   unittests
     __init__.py
     alltests.py
     test1.py
     test2.py

  within alltests.py I would expect to be able to import
  mypackage.unittests.test1.  In fact within PyScripter this works as
  expected.  However, when I execute the code from the command line, I
  get the following error:

  ImportError: No module named mypackage.unittests.test1

 1) What is the command you're using to run the alltest.py module?

 2) what is the result of:
    - python -c import mypackage
   - python -c import mypackage.unittests

 Regards
 Marco

 --
 Marco Bizzarrihttp://iliveinpisa.blogspot.com/

I have tried running both commands above from the mypackage directory
and unittests directory.  I get the following response universtally.

C:\mypackagedir
 Volume in drive C is Default

 Directory of C:\mypackage

08/29/2008  11:04 AMDIR  .
08/29/2008  11:04 AMDIR  ..
08/29/2008  11:05 AMDIR  module1
08/29/2008  11:05 AMDIR  module2
08/29/2008  11:06 AMDIR  unittests
08/29/2008  11:04 AM 0 __init__.py
   1 File(s)  0 bytes
   5 Dir(s)  55,402,070,016 bytes free

C:\mypackagedir unittests
 Volume in drive C is Default

 Directory of C:\mypackage\unittests

08/29/2008  11:06 AMDIR  .
08/29/2008  11:06 AMDIR  ..
08/29/2008  11:05 AM 0 alltests.py
08/29/2008  11:05 AM 0 test1.py
08/29/2008  11:05 AM 0 test2.py
08/29/2008  11:04 AM 0 __init__.py
   4 File(s)  0 bytes
   2 Dir(s)  55,401,988,096 bytes free

C:\mypackagepython -c import mypackage
Traceback (most recent call last):
  File string, line 1, in module
ImportError: No module named mypackage

C:\mypackagepython -c import mypackage.unittests
Traceback (most recent call last):
  File string, line 1, in module
ImportError: No module named mypackage.unittests
--
http://mail.python.org/mailman/listinfo/python-list


Re: problem with packages and path

2008-08-29 Thread Paul Boddie
On 29 Aug, 19:08, Daniel [EMAIL PROTECTED] wrote:

 I have tried running both commands above from the mypackage directory
 and unittests directory.  I get the following response universtally.

 C:\mypackagedir
  Volume in drive C is Default

  Directory of C:\mypackage

 08/29/2008  11:04 AMDIR  .
 08/29/2008  11:04 AMDIR  ..
 08/29/2008  11:05 AMDIR  module1
 08/29/2008  11:05 AMDIR  module2
 08/29/2008  11:06 AMDIR  unittests
 08/29/2008  11:04 AM 0 __init__.py
1 File(s)  0 bytes
5 Dir(s)  55,402,070,016 bytes free

If you run unittests\alltests.py from here, sys.path will initially
refer to this directory (C:\mypackage) and to anything else set up in
your environment. The extra path modification that you put in
alltests.py will append (or insert) the following...

   os.path.normpath( os.path.join( __file__, ../../ ))
- os.path.normpath( os.path.join( C\\:mypackage\\unittests\
\alltests.py, ../../ ))
- os.path.normpath( C\\:mypackage )
- C\\:mypackage

Since the import statement then tries to access mypackage, which isn't
itself in the C:\mypackage directory - it's in the C:\ directory - the
import fails. The previous, automatically added entry in sys.path is
duplicated by the path modifications shown above, so that won't help
here, either.

 C:\mypackagedir unittests
  Volume in drive C is Default

  Directory of C:\mypackage\unittests

 08/29/2008  11:06 AMDIR  .
 08/29/2008  11:06 AMDIR  ..
 08/29/2008  11:05 AM 0 alltests.py
 08/29/2008  11:05 AM 0 test1.py
 08/29/2008  11:05 AM 0 test2.py
 08/29/2008  11:04 AM 0 __init__.py
4 File(s)  0 bytes
2 Dir(s)  55,401,988,096 bytes free

Here, sys.path should refer to C:\mypackage\unittests somewhere, which
won't help Python find mypackage. The path modification in alltests.py
should perform as above, producing C:\mypackage which won't help.

I guess the easiest thing to do is to change the path modification
code to use ../../.. which should produce a reference to C:\ instead
of C:\mypackage. The confusion with this particular piece of the code
is the way .. doesn't cause os.path.join to operate on the directory
C:\mypackage\unittests but instead on the file C:\mypackage\unittests
\alltests.py - that's almost to be expected, however, since
os.path.join doesn't really know that its first argument is really a
file or that .. is being combined with a file.

What I tend to do, especially with __file__, is to first use
os.path.split to remove the filename - strictly speaking, it's the
leafname - and then to apply the kind of modifications mentioned
above, although there's probably no real difference or, indeed, any
advantage with either approach.

Paul
--
http://mail.python.org/mailman/listinfo/python-list


Re: problem with packages and path

2008-08-29 Thread Daniel
On Aug 29, 1:15 pm, Paul Boddie [EMAIL PROTECTED] wrote:
 On 29 Aug, 19:08, Daniel [EMAIL PROTECTED] wrote:





  I have tried running both commands above from the mypackage directory
  and unittests directory.  I get the following response universtally.

  C:\mypackagedir
   Volume in drive C is Default

   Directory of C:\mypackage

  08/29/2008  11:04 AM    DIR          .
  08/29/2008  11:04 AM    DIR          ..
  08/29/2008  11:05 AM    DIR          module1
  08/29/2008  11:05 AM    DIR          module2
  08/29/2008  11:06 AM    DIR          unittests
  08/29/2008  11:04 AM                 0 __init__.py
                 1 File(s)              0 bytes
                 5 Dir(s)  55,402,070,016 bytes free

 If you run unittests\alltests.py from here, sys.pathwill initially
 refer to this directory (C:\mypackage) and to anything else set up in
 your environment. The extrapathmodification that you put in
 alltests.py will append (or insert) the following...

    os.path.normpath( os.path.join( __file__, ../../ ))
 - os.path.normpath( os.path.join( C\\:mypackage\\unittests\
 \alltests.py, ../../ ))
 - os.path.normpath( C\\:mypackage )
 - C\\:mypackage

 Since the import statement then tries to access mypackage, which isn't
 itself in the C:\mypackage directory - it's in the C:\ directory - the
 import fails. The previous, automatically added entry in sys.pathis
 duplicated by thepathmodifications shown above, so that won't help
 here, either.

  C:\mypackagedir unittests
   Volume in drive C is Default

   Directory of C:\mypackage\unittests

  08/29/2008  11:06 AM    DIR          .
  08/29/2008  11:06 AM    DIR          ..
  08/29/2008  11:05 AM                 0 alltests.py
  08/29/2008  11:05 AM                 0 test1.py
  08/29/2008  11:05 AM                 0 test2.py
  08/29/2008  11:04 AM                 0 __init__.py
                 4 File(s)              0 bytes
                 2 Dir(s)  55,401,988,096 bytes free

 Here, sys.pathshould refer to C:\mypackage\unittests somewhere, which
 won't help Python find mypackage. Thepathmodification in alltests.py
 should perform as above, producing C:\mypackage which won't help.

 I guess the easiest thing to do is to change thepathmodification
 code to use ../../.. which should produce a reference to C:\ instead
 of C:\mypackage. The confusion with this particular piece of the code
 is the way .. doesn't cause os.path.join to operate on the directory
 C:\mypackage\unittests but instead on the file C:\mypackage\unittests
 \alltests.py - that's almost to be expected, however, since
 os.path.join doesn't really know that its first argument is really a
 file or that .. is being combined with a file.

 What I tend to do, especially with __file__, is to first use
 os.path.split to remove the filename - strictly speaking, it's the
 leafname - and then to apply the kind of modifications mentioned
 above, although there's probably no real difference or, indeed, any
 advantage with either approach.

 Paul

Thanks Paul.  That did the trick.

Daniel
--
http://mail.python.org/mailman/listinfo/python-list


Re: problem with packages and path

2008-08-28 Thread Marco Bizzarri
On Wed, Aug 27, 2008 at 6:44 PM, Daniel [EMAIL PROTECTED] wrote:
 Hello,

 I'm writing some unit tests for my python software which uses
 packages.  Here is the basic structure:

 mypackage
  __init__.py
  module1
__init__.py
mod1.py
  module2
__init__.py
mod2.py
  unittests
__init__.py
alltests.py
test1.py
test2.py

 within alltests.py I would expect to be able to import
 mypackage.unittests.test1.  In fact within PyScripter this works as
 expected.  However, when I execute the code from the command line, I
 get the following error:

 ImportError: No module named mypackage.unittests.test1


1) What is the command you're using to run the alltest.py module?

2) what is the result of:
   - python -c import mypackage
  - python -c import mypackage.unittests

Regards
Marco



-- 
Marco Bizzarri
http://iliveinpisa.blogspot.com/
--
http://mail.python.org/mailman/listinfo/python-list


Re: problem with packages and path

2008-08-27 Thread Paul Boddie
On 27 Aug, 18:44, Daniel [EMAIL PROTECTED] wrote:

 I'm writing some unit tests for my python software which uses
 packages.  Here is the basic structure:

 mypackage

[...]

   unittests
     __init__.py
     alltests.py
     test1.py
     test2.py

 within alltests.py I would expect to be able to import
 mypackage.unittests.test1.  In fact within PyScripter this works as
 expected.  However, when I execute the code from the command line, I
 get the following error:

 ImportError: No module named mypackage.unittests.test1

One thing to note: if you are running alltests.py directly (which you
don't mention explicitly) then even if you do so from the directory
containing the root of the package hierarchy (mypackage), it will be
the directory containing alltests.py (unittests) which will appear on
the PYTHONPATH/sys.path. Sometimes it's easy to take this behaviour
for granted when running programs.

A question: what happens if you prepend the directory containing the
root of package hierarchy to sys.path using insert (at element 0)
rather than append?

Paul
--
http://mail.python.org/mailman/listinfo/python-list


Re: problem with packages and path

2008-08-27 Thread Daniel
On Aug 27, 11:00 am, Paul Boddie [EMAIL PROTECTED] wrote:
 On 27 Aug, 18:44, Daniel [EMAIL PROTECTED] wrote:



  I'm writing some unit tests for my python software which uses
  packages.  Here is the basic structure:

  mypackage

 [...]

    unittests
      __init__.py
      alltests.py
      test1.py
      test2.py

  within alltests.py I would expect to be able to import
  mypackage.unittests.test1.  In fact within PyScripter this works as
  expected.  However, when I execute the code from the command line, I
  get the following error:

  ImportError: No module named mypackage.unittests.test1

 One thing to note: if you are running alltests.py directly (which you
 don't mention explicitly) then even if you do so from the directory
 containing the root of the package hierarchy (mypackage), it will be
 the directory containing alltests.py (unittests) which will appear on
 the PYTHONPATH/sys.path. Sometimes it's easy to take this behaviour
 for granted when running programs.

 A question: what happens if you prepend the directory containing the
 root of package hierarchy to sys.path using insert (at element 0)
 rather than append?

 Paul

I changed it to 'sys.path.insert(0, newpath)', as you suggest, but it
doesn't fix the error.

I did notice that the directory containing the file alltests.py ends
up in the path.  I've also noticed that (in WinXP at least) the
sys.path modification inserts a '..' in the path, rather than the full
path to 'mypackage'.  I'm not sure if this makes a difference, but it
seems like I should be able to add either '..' or 'path/to/mypackage'
to the path and have it find my packages.

Any more suggestions?
--
http://mail.python.org/mailman/listinfo/python-list


Re: problem with packages and path

2008-08-27 Thread Daniel
On Aug 27, 11:00 am, Paul Boddie [EMAIL PROTECTED] wrote:
 On 27 Aug, 18:44, Daniel [EMAIL PROTECTED] wrote:



  I'm writing some unit tests for my python software which uses
  packages.  Here is the basic structure:

  mypackage

 [...]

    unittests
      __init__.py
      alltests.py
      test1.py
      test2.py

  within alltests.py I would expect to be able to import
  mypackage.unittests.test1.  In fact within PyScripter this works as
  expected.  However, when I execute the code from the command line, I
  get the following error:

  ImportError: No module named mypackage.unittests.test1

 One thing to note: if you are running alltests.py directly (which you
 don't mention explicitly) then even if you do so from the directory
 containing the root of the package hierarchy (mypackage), it will be
 the directory containing alltests.py (unittests) which will appear on
 the PYTHONPATH/sys.path. Sometimes it's easy to take this behaviour
 for granted when running programs.

 A question: what happens if you prepend the directory containing the
 root of package hierarchy to sys.path using insert (at element 0)
 rather than append?

 Paul

I changed it to 'sys.path.insert(0, newpath)', as you suggest, but it
doesn't fix the error.

I did notice that the directory containing the file alltests.py ends
up in the path.  I've also noticed that (in WinXP at least) the
sys.path modification inserts a '..' in the path, rather than the full
path to 'mypackage'.  I'm not sure if this makes a difference, but it
seems like I should be able to add either '..' or 'path/to/mypackage'
to the path and have it find my packages.

Any more suggestions?
--
http://mail.python.org/mailman/listinfo/python-list