Discussion:
[Python.NET] installing pythondotnet in existing python under windows
Max Slimmer
2011-10-28 03:16:02 UTC
Permalink
I am running python 2.6 under windows and would like to access some .net
code. I have downloaded pythonnet-2.0-alpha2-136-py26.zip from
source-forge.
I can run the python.exe in \python2.6-UCS2 folder and from there import
clr, however I want to import and run from my existing python2.6
installation. I put the clr.pyd file in sitepackages and also in DLLs but
when I get the following:

Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
on
win32
Type "help", "copyright", "credits" or "license" for more information.
import clr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initclr)
I also could use a bit more documentation, I went to Bryan Lloyd's blog and
see:
Refactored import syntax: now you can use un-prefixed namespace names (
"from System import *") instead of the old "magic CLR module" syntax ("from
CLR.System...). The old "CLR." syntax is still supported until 3.0, but now
officially deprecated. This was the main compatibility problem with code
targeted for IP.

I can't figure how to get here!

what is the difference between the -UCS2 and -UCS4 folders?
Bradley Friedman
2011-10-30 17:47:49 UTC
Permalink
CPython is compiled with one of two unicode modes. The symbols in the dynamic library are different based on that original configuration flag. Basically that config flag on python makes versions of python that are binary incompatible with one another even though they are the same version. Native python extensions that link against python, need to therefore be linked against one or the other. You can't link against both simultaneously.

Since most CPython native extensions are either pre built for a linux distribution (under the control of a managed package system), or are built on the target system itself, this is not an issue. They know which flags were used by the python on the system. In windows land, which is primarily a binary distribution land in which there is no cohesive binary package system managing the dependencies, your only real choice for binary distributions is to build both and provide them both.

If you try to run a mismatched binary with python, it will error out at runtime saying it can't find symbols, or entry points. This would potentially look much like the error you post. Though I would expect to see a more specific error info. But at its base level, it would have trouble finding the function it was looking for, due to the function being fundamentally different in the data type of the parameters. The symbol it was looking for would not be found.

Though there could be a myriad of other reasons why its having trouble finding that symbol.
I am running python 2.6 under windows and would like to access some .net code. I have downloaded pythonnet-2.0-alpha2-136-py26.zip from source-forge.
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
import clr
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initclr)
Refactored import syntax: now you can use un-prefixed namespace names ( "from System import *") instead of the old "magic CLR module" syntax ("from CLR.System...). The old "CLR." syntax is still supported until 3.0, but now officially deprecated. This was the main compatibility problem with code targeted for IP.
I can't figure how to get here!
what is the difference between the -UCS2 and -UCS4 folders?
_________________________________________________
http://mail.python.org/mailman/listinfo/pythondotnet
Max Slimmer
2011-10-30 20:23:00 UTC
Permalink
I tried using the clr.pyd from both python1.6-UCS2 and python2.6-UCS4
folders, same results. I am running the current python windows build:
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit
(Intel)] on win32

Has anyone built clr.pyd for this distribution. I am not that familiar with
latest ms Visual Studio etc. Looking at src/ in svn I see mostly .cs files,
I would really like to be able to
import clr
then clr.AddReferenct(somefile)
# instantiat python object from somefile
xx = somefile.someobject()
...etc...

I can do this using the python.exe found in the python2.6-UCS2 folder, but
I want to use my regular python that has numerous packages and where I
build a product with py2exe...

What are my options, must I use the python distributed with pythonDotNet,
and if so what are the repercussions when trying to use other packages. I
see that if I run the python .exe that it gets my installed .site
information and therefore has access to all my libraries. What has been
done to this python.exe and can I simply move it to my python26/ directory?

It feels very strange to override the python.exe in the standard
distribution, what about things built with py2exe will they still work?

Any enlightenment would be much appreciated.

max



Max Slimmer
eMail: max-***@public.gmane.org
phone: 707 703-4396
Post by Bradley Friedman
CPython is compiled with one of two unicode modes. The symbols in the
dynamic library are different based on that original configuration flag.
Basically that config flag on python makes versions of python that are
binary incompatible with one another even though they are the same version.
Native python extensions that link against python, need to therefore be
linked against one or the other. You can't link against both
simultaneously.
Since most CPython native extensions are either pre built for a linux
distribution (under the control of a managed package system), or are built
on the target system itself, this is not an issue. They know which flags
were used by the python on the system. In windows land, which is primarily
a binary distribution land in which there is no cohesive binary package
system managing the dependencies, your only real choice for binary
distributions is to build both and provide them both.
If you try to run a mismatched binary with python, it will error out at
runtime saying it can't find symbols, or entry points. This would
potentially look much like the error you post. Though I would expect to
see a more specific error info. But at its base level, it would have
trouble finding the function it was looking for, due to the function being
fundamentally different in the data type of the parameters. The symbol it
was looking for would not be found.
Though there could be a myriad of other reasons why its having trouble finding that symbol.
I am running python 2.6 under windows and would like to access some .net
code. I have downloaded pythonnet-2.0-alpha2-136-py26.zip from
source-forge.
I can run the python.exe in \python2.6-UCS2 folder and from there import
clr, however I want to import and run from my existing python2.6
installation. I put the clr.pyd file in sitepackages and also in DLLs but
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
import clr
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initclr)
Refactored import syntax: now you can use un-prefixed namespace names (
"from System import *") instead of the old "magic CLR module" syntax ("from
CLR.System...). The old "CLR." syntax is still supported until 3.0, but now
officially deprecated. This was the main compatibility problem with code
targeted for IP.
I can't figure how to get here!
what is the difference between the -UCS2 and -UCS4 folders?
_________________________________________________
http://mail.python.org/mailman/listinfo/pythondotnet
Loading...