alain MONTMORY wrote:
Hello everybody,
I am a newbie to python so I hope I am at the right place to expose my
problem..... :-[
I am working on linux mandrake 10.1 with python :
python -V
Python 2.3.4
I am trying o run the example which stay in the documentation in paragraph
http://www.python.org/doc/2.4.2/ext/pure-embedding.html 5.3 Pure Embedding
I download the code example from
http://www.python.org/doc/2.4.2/ext/run-func.txt
I call the file "TestOfficiel.c" and I compile it with :
gcc -g -I/usr/include/python2.3/ TestOfficiel.c -o TestOfficiel
-lpython2.3 -ldl
all is OK (or seems to be...).
as stated in the documentation I creat a file "TestPythonFoo.py" which
contain
"
def multiply(a,b):
print "Will compute", a, "times", b
c = 0
for i in range(0, a):
c = c + b
return c
"
I launch
./TestOfficiel ./TestPythonFoo.py multiply 3 2
and as a result :
ValueError: Empty module name
Failed to load "./TestPythonFoo.py"
This is (I believe) because of the "." at the front.
if I try an absolute path to the python file :
./TestOfficiel `pwd`/TestPythonFoo.py multiply 3 2
I obtain :
ImportError: No module named
/space/ESOPPE_PROJET/Outils/SwigPython/swigCallPython/TestPythonFoo.py
It's quite correct, there never could be a module named that. The name
of your module is TestPythonFoo -- so all you should have to do is
./TestOfficiel TestPythonFoo multiply 3 2
Failed to load
"/space/ESOPPE_PROJET/Outils/SwigPython/swigCallPython/TestPythonFoo.py"
Of course the file exist :
[EMAIL PROTECTED] swigCallPython]$ ll
/space/ESOPPE_PROJET/Outils/SwigPython/swigCallPython/TestPythonFoo.py
-rwxrwx--x 1 montmory esoppe 126 sep 29 14:04
/space/ESOPPE_PROJET/Outils/SwigPython/swigCallPython/TestPythonFoo.py*
I found lot of post about "ValueError: Empty module name" but no clear
solution (clear for me...).
What's wrong ?
my python version?
Additionnal informations :
gcc version 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)
Thanks for your help,
best regards,
Alain
--------------070105030901000008070407
Content-Type: text/plain
Content-Disposition: inline;
filename="TestOfficiel.c"
X-Google-AttachSize: 2022
#include <Python.h>
int
main(int argc, char *argv[])
{
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pArgs, *pValue;
int i;
if (argc < 3) {
fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
"pythonfile" is confusing; it should be "modulename".
Yes you are right, but i left the example file "as it is"
return 1;
}
Py_Initialize();
pName = PyString_FromString(argv[1]);
/* Error checking of pName left out */
pModule = PyImport_Import(pName);
As the docs for this function say, it just calls the same routine that
is called by the __import__ built-in function. One can experiment with
that:
OS-prompt>copy con foo.py
print 'hello fubar world'
^Z
1 file(s) copied.
OS-prompt>python
Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
__import__("foo")
hello fubar world
<module 'foo' from 'foo.py'>
__import__("foo.py")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: No module named py
__import__("")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: Empty module name
__import__(r".\foo")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: Empty module name
__import__(r"./foo")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: Empty module name
__import__(r"/foo")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: No module named /foo
__import__(r".foo")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: Empty module name
Hmmm ... "empty module name" is rather misleading when it starts with a
"." -- I can feel a bugfix^^^^^^ enhancement request coming on :-)
HTH,
John