import fails in non-interactive interpreter

B

Brian

I've been banging my head against this for the past hour, and I'm
hoping someone here can set me straight.

I have a virtualenv setup for a Pyramid app and I'm having trouble
importing the paste.deploy module in a standalone, non-Pyramid script
within the virtualenv.

For testing purposes I have a one line "test.py" file:

from paste.deploy import appconfig
python test.py
ImportError: No module named paste.deploy

but, using the same same python, I'm able to import the module from
the interactive interpreter. The PATH and PYTHONPATH environment
variables are identical in both contexts.

Under what situations would a module be available to through the
interactive interpreter but not the non-interactive?

I greatly appreciate any thoughts,
Brian
 
D

Devin Jeanpierre

Under what situations would a module be available to through the
interactive interpreter but not the non-interactive?

I don't know if it matches your situation, but one such case is this:

The interactive interpreter (and the interpreter with the -c flag) add
the current working directory ('') to the module import search path
(sys.path). Regular python execution does not. So modules in the
current working directory can always be imported from the interactive
interpreter, but not necessarily if you run python on a source file.

-- Devin
 
J

Jean-Michel Pichavant

Brian said:
I've been banging my head against this for the past hour, and I'm
hoping someone here can set me straight.

[Snip]
but, using the same same python, I'm able to import the module from
the interactive interpreter. The PATH and PYTHONPATH environment
variables are identical in both contexts.
Are you sure ? with python 2.5, in interactive mode '' is happened to
sys.path and is absent from it when a python file is executed.

python -c "import sys; print '' in sys.path"
True
python test.py
False
Under what situations would a module be available to through the
interactive interpreter but not the non-interactive?

I greatly appreciate any thoughts,
Brian
As a more general notice, if you want to be able to import paste from
everywhere, it must be properly installed as a python module.

Cheers,

JM
 
B

Brian Brinegar

JM,

Thanks for the response, you're correct '' is pre-pended to the path
in interactive mode. I've tried adding . to my PYTHONPATH and it
doesn't solve the problem.

When imported from interactive python the paste.deploy module is located at:
['/home/brian/webapps/test_dyn/lib/python2.7/paste/deploy']

My path for both interactive and non-interactive contains:

/home/brian/webapps/test_dyn/lib/python2.7
From the interactive interpreter I can import paste if my working
directory is inside of the.

/home/brian/webapps/test_dyn

Moving to a working directory above "test_dyn" point causes the import
to fail in the interactive interpreter as well.

I am able to import packages located the lib/python2.7/site-packages
directory of my virtualenv instance, but not the lib/python2.7
directory.

Thanks again,
Brian



Brian said:
I've been banging my head against this for the past hour, and I'm
hoping someone here can set me straight.


[Snip]

but, using the same same python, I'm able to import the module from
the interactive interpreter. The PATH and PYTHONPATH environment
variables are identical in both contexts.

Are you sure ? with python 2.5, in interactive mode '' is happened to
sys.path and is absent from it when a python file is executed.

python -c "import sys; print '' in sys.path"
True
python test.py
False
Under what situations would a module be available to through the
interactive interpreter but not the non-interactive?

I greatly appreciate any thoughts,
Brian

As a more general notice, if you want to be able to import paste from
everywhere, it must be properly installed as a python module.

Cheers,

JM
 
J

Jean-Michel Pichavant

Brian said:
JM,

Thanks for the response, you're correct '' is pre-pended to the path
in interactive mode. I've tried adding . to my PYTHONPATH and it
doesn't solve the problem.

When imported from interactive python the paste.deploy module is located at:

['/home/brian/webapps/test_dyn/lib/python2.7/paste/deploy']

My path for both interactive and non-interactive contains:

/home/brian/webapps/test_dyn/lib/python2.7

From the interactive interpreter I can import paste if my working
directory is inside of the.

/home/brian/webapps/test_dyn

Moving to a working directory above "test_dyn" point causes the import
to fail in the interactive interpreter as well.

I am able to import packages located the lib/python2.7/site-packages
directory of my virtualenv instance, but not the lib/python2.7
directory.

Thanks again,
Brian



Brian said:
I've been banging my head against this for the past hour, and I'm
hoping someone here can set me straight.


[Snip]

but, using the same same python, I'm able to import the module from
the interactive interpreter. The PATH and PYTHONPATH environment
variables are identical in both contexts.
Are you sure ? with python 2.5, in interactive mode '' is happened to
sys.path and is absent from it when a python file is executed.

python -c "import sys; print '' in sys.path"
True
python test.py
False

Under what situations would a module be available to through the
interactive interpreter but not the non-interactive?

I greatly appreciate any thoughts,
Brian
As a more general notice, if you want to be able to import paste from
everywhere, it must be properly installed as a python module.

Cheers,

JM
Difficult to say without your PYTHONPATH value.

Assuming your PYTHONPATH is

/home/brian/webapps/test_dyn/lib/python2.7/site-packages

1/ paste is stable, copy the paste directory into
/home/brian/webapps/test_dyn/lib/python2.7/site-packages
2/ paste is not stable, i.e. you're changing it from time to time, make
a symbolic link to your dev paste directory within
/home/brian/webapps/test_dyn/lib/python2.7/site-packages

you should now be able to import paste from anywhere.

JM


PS : please don't top post
 
B

Brian Brinegar

Brian said:
JM,

Thanks for the response, you're correct '' is pre-pended to the path
in interactive mode. I've tried adding . to my PYTHONPATH and it
doesn't solve the problem.

When imported from interactive python the paste.deploy module is located
at:

import paste.deploy
paste.deploy.__path__

['/home/brian/webapps/test_dyn/lib/python2.7/paste/deploy']

My path for both interactive and non-interactive contains:

/home/brian/webapps/test_dyn/lib/python2.7

From the interactive interpreter I can import paste if my working
directory is inside of the.

/home/brian/webapps/test_dyn

Moving to a working directory above "test_dyn" point causes the import
to fail in the interactive interpreter as well.

I am able to import packages located the lib/python2.7/site-packages
directory of my virtualenv instance, but not the lib/python2.7
directory.

Thanks again,
Brian



Brian wrote:


I've been banging my head against this for the past hour, and I'm
hoping someone here can set me straight.




[Snip]


but, using the same same python, I'm able to import the module from
the interactive interpreter. The PATH and PYTHONPATH environment
variables are identical in both contexts.



Are you sure ? with python 2.5, in interactive mode '' is happened to
sys.path and is absent from it when a python file is executed.

python -c "import sys; print '' in sys.path"
True
python test.py
False



Under what situations would a module be available to through the
interactive interpreter but not the non-interactive?

I greatly appreciate any thoughts,
Brian



As a more general notice, if you want to be able to import paste from
everywhere, it must be properly installed as a python module.

Cheers,

JM

Difficult to say without your PYTHONPATH value.

Assuming your PYTHONPATH is

/home/brian/webapps/test_dyn/lib/python2.7/site-packages

1/ paste is stable, copy the paste directory into
/home/brian/webapps/test_dyn/lib/python2.7/site-packages
2/ paste is not stable, i.e. you're changing it from time to time, make a
symbolic link to your dev paste directory within
/home/brian/webapps/test_dyn/lib/python2.7/site-packages

you should now be able to import paste from anywhere.

JM


PS : please don't top post

JM,

Thanks so much for all of your help. I added a symlink in
site-packages and it still did not work. Upon further investigation I
found that the there wasn't an __init__.py in the paste or
paste/deploy directories. Creating python2.7/paste/__init__.py and
python2.7/paste/deploy/__init__.py fixed the issue without a need for
the symlink.

I'm curious why the interactive interpreter is able to import this
without the proper package structure.

Thanks again for your help,
Brian
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top