Re: Using cx_Oracle 6.0rc1 on Windows

Anthony Tuininga <[email protected]> Wed, 5 Jul 2017 16:45:54 -0600
Newsgroups gmane.comp.python.db.cx-oracle
Message-ID <CAE1XR-6WXcLefwZSse_ew_pQQh_x=HuEx-bd4NdAQzkP+Vmdqg@mail.gmail.com>
--===============0890342574243414879==
Content-Type: multipart/alternative; boundary="089e0822ed5c4e639a055399c3a8"

--089e0822ed5c4e639a055399c3a8
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, Jul 5, 2017 at 4:12 PM, Anthony Tuininga <[email protected]=
m
> wrote:

> On Wed, Jul 5, 2017 at 8:21 AM, Anthony Tuininga <
> [email protected]> wrote:
>
>>
>>
>> On Wed, Jul 5, 2017 at 6:29 AM, Walter D=C3=B6rwald <walter@livinglogic.=
de>
>> wrote:
>>
>>> On 4 Jul 2017, at 16:35, Anthony Tuininga wrote:
>>>
>>> On Tue, Jul 4, 2017 at 3:18 AM, Walter D=C3=B6rwald <walter@livinglogic=
.de>
>>>> wrote:
>>>>
>>>> On 3 Jul 2017, at 15:59, Anthony Tuininga wrote:
>>>>>
>>>>> Hi Walter,
>>>>>
>>>>>>
>>>>>> DPI_DEBUG_LEVEL=3D7 causes a bunch of output that tells me which pub=
lic
>>>>>> ODPI-C functions are being called. The fact that you are not getting
>>>>>> any
>>>>>> at
>>>>>> all suggests something is going wrong even before cx_Oracle code is
>>>>>> involved. Can you try a few more things?
>>>>>>
>>>>>> 1) Use python -v so you can see if the error is occurring prior to t=
he
>>>>>> actual import of cx_Oracle (it may not help but it might, too)
>>>>>>
>>>>>>
>>>>> Here is the output of importing cx_Oracle in a verbose Python session=
:
>>>>> [...]
>>>>> Traceback (most recent call last):
>>>>>   File "<stdin>", line 1, in <module>
>>>>>   File "<frozen importlib._bootstrap>", line 961, in _find_and_load
>>>>>   File "<frozen importlib._bootstrap>", line 950, in
>>>>> _find_and_load_unlocked
>>>>>   File "<frozen importlib._bootstrap>", line 648, in _load_unlocked
>>>>>   File "<frozen importlib._bootstrap>", line 560, in module_from_spec
>>>>>   File "<frozen importlib._bootstrap_external>", line 922, in
>>>>> create_module
>>>>>   File "<frozen importlib._bootstrap>", line 205, in
>>>>> _call_with_frames_removed
>>>>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position
>>>>> 66:
>>>>> invalid continuation byte
>>>>>
>>>>>
>>>> Looks like it may have started running code in the module as the first
>>>> thing it does is imports the datetime and decimal modules. If you're
>>>> able
>>>> to add some printf() statements at key positions in the
>>>> Module_Initialize()
>>>> function in src/cx_Oracle.c that would be helpful. In particular, at t=
he
>>>> very beginning (to confirm that it is running), after the imports, aft=
er
>>>> the PyModule_Create() call, just prior to the dpiContext_create() call=
,
>>>> just after it, and just at the end. I wish I could replicate this
>>>> myself!
>>>>
>>>
>>> We've found the spot where the error occurs with the following patch:
>>>
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>
>>> C:\checkouts\python-cx_Oracle\odpi>git diff
>>> diff --git a/src/dpiOci.c b/src/dpiOci.c
>>> index f881bed..e588b1c 100644
>>> --- a/src/dpiOci.c
>>> +++ b/src/dpiOci.c
>>> @@ -1338,6 +1338,7 @@ static int dpiOci__loadLib(dpiError *error)
>>>  #ifdef _WIN32
>>>      DWORD length, errorNum;
>>>  #endif
>>> +    printf("Start dpiOci__loadLib()\n");
>>>
>>>      // dynamically load the OCI library
>>>      for (i =3D 0; !dpiOciLibHandle; i++) {
>>> @@ -1356,6 +1357,7 @@ static int dpiOci__loadLib(dpiError *error)
>>>              if (length > 3)
>>>                  loadError[length - 3] =3D '\0';
>>>              else strcpy(loadError, "DLL load failed");
>>> +            printf("loadError: %s\n",loadError);
>>>          }
>>>  #else
>>>          dpiOciLibHandle =3D dlopen(libName, RTLD_LAZY);
>>> @@ -1370,6 +1372,7 @@ static int dpiOci__loadLib(dpiError *error)
>>>          return dpiError__set(error, "load library",
>>> DPI_ERR_LOAD_LIBRARY,
>>>                  loadError);
>>>
>>> +    printf("After LoadLibrary()\n");
>>>      // validate library
>>>      if (dpiOci__loadLibValidate(error) < 0) {
>>>  #ifdef _WIN32
>>>
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>
>>> With this patch, we get the following output:
>>>
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>
>>> import cx_Oracle
>>>>>>
>>>>> Start dpiOci__loadLib()
>>> loadError: %1 ist keine zul=C3=B5ssige Win32-Anwendung
>>> Traceback (most recent call last):
>>>   File "<stdin>", line 1, in <module>
>>>   File "<frozen importlib._bootstrap>", line 961, in _find_and_load
>>>   File "<frozen importlib._bootstrap>", line 950, in
>>> _find_and_load_unlocked
>>>   File "<frozen importlib._bootstrap>", line 648, in _load_unlocked
>>>   File "<frozen importlib._bootstrap>", line 560, in module_from_spec
>>>   File "<frozen importlib._bootstrap_external>", line 922, in
>>> create_module
>>>   File "<frozen importlib._bootstrap>", line 205, in
>>> _call_with_frames_removed
>>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 66=
:
>>> invalid continuation byte
>>>
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>>
>>> "%1 ist keine zul=C3=B5ssige Win32-Anwendung" (which should read "%1 is=
t
>>> keine zul=C3=A4ssige Win32-Anwendung", i.e. the "=C3=B6" should be an "=
=C3=A4") means "%1
>>> is not an acceptable win32 application".
>>>
>>> So we don't see the real problem because cx_Oracle fails to create the
>>> proper Unicode string from the OS error message.
>>>
>>> It's not clear what encoding this is (probable latin-1 or cp1252, but
>>> definitely *not* UTF-8). A
>>>
>>>    grep 'xe4.*LATIN SMALL LETTER A WITH DIAERESIS' Lib/encodings/*.py
>>>
>>> in the Python source code returns 40 encodings that map the byte 0xE4 t=
o
>>> =C3=A4.
>>>
>>> If the correct encoding can't be determined from the environment it
>>> might be best to use a less strict error handling (like e.g.
>>> backslashreplace) when decoding the bytes of the error message.
>>>
>>
>> Thanks, Walter. This is very helpful. We'll have to see what makes the
>> most sense in this case. Do you see information in the event log regardi=
ng
>> this error?
>>
>
> I have discovered the source of the problem. I was able to replicate the
> issue thanks to this pointer and have corrected it in the source. If you
> can do a new pull and compile you should get the correct error message no=
w.
> If you can confirm that would be helpful! Thanks.
>

Just to be clear since the process is a bit different now: in your
cx_Oracle repository you need to issue the following commands:

git pull
git submodule update

That will update ODPI-C (where the correction was made) as well as
cx_Oracle itself.


>
>
>>
>>
>>>
>>> And of cause it would help if %1 was resolved to a useful filename.
>>>
>>
>> Naturally. But that information isn't directly provided. I'll look into
>> that, too.
>>
>
> This is a limitation of Windows and there isn't much that can be done
> about it. Sorry!
>
>
>>
>>
>>>
>>> But now for the real error...
>>>
>>> [...]
>>>>
>>>>>
>>>>> I also note that you are using VS 2017. Another person noted that
>>>>>
>>>>>> uninstalling VS 2017 and using an earlier version worked for him --
>>>>>> why
>>>>>> that would be is an interesting question (!!?) but if you have a
>>>>>> machine
>>>>>> that doesn't have VS 2017 but an earlier version that would be worth
>>>>>> testing, too.
>>>>>>
>>>>>>
>>>>> We currently don't have a Windows 10 machine without VS 2017, but we'=
re
>>>>> going to
>>>>> uninstall VS 2017 on this machine and retry with and an older version=
.
>>>>>
>>>>> Also, IIRC this exception means that the VS Redistributables are
>>>>> missing
>>>>> or are
>>>>> installed incorrectly.
>>>>>
>>>>> However I don't know how we can check this.
>>>>>
>>>>
>>>>
>>>> You can use this tool: http://www.dependencywalker.com/ which will
>>>> tell you
>>>> what dependencies the cx_Oracle.pyd file and all of their dependencies=
,
>>>> too. Hopefully it helps.
>>>>
>>>
>>> OK, we tried that. The output is here:
>>>
>>>    http://styx.livinglogic.de/~walter/cx_Oracle/cx_Oracle.cp36
>>> -win_amd64.txt
>>>
>>> dependencywalker seem that have many problems with this DLL, but what
>>> sticks out is VCRUNTIME140.dll. This seems to be part of the "Visual C+=
+
>>> Redistributable for Visual Studio 2015" which we downloaded from here:
>>>
>>>    https://www.microsoft.com/en-us/download/details.aspx?id=3D48145
>>>
>>> (we've downloaded vc_redist.x64.exe). When we install it, it complains
>>> that another version is already installed. After we've uninstalled the =
2017
>>> Redistributables installation works, but the output of "import cx_Oracl=
e"
>>> remains the same.
>>>
>>
>> So the problem isn't resolved by the change of VS redistributable. Can
>> you take a look in the event log? Can you also provide a list of all of =
the
>> VS redistributables you have installed? I am going to try to replicate t=
his
>> myself.
>>
>>
>>>
>>> [...]
>>>>
>>>
>>> Servus,
>>>    Walter
>>>
>>> ------------------------------------------------------------
>>> ------------------
>>> Check out the vibrant tech community on one of the world's most
>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>> _______________________________________________
>>> cx-oracle-users mailing list
>>> cx-oracle-users-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
>>> https://lists.sourceforge.net/lists/listinfo/cx-oracle-users
>>>
>>
>>
>

--089e0822ed5c4e639a055399c3a8
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">On Wed, Jul 5, 2017 at 4:12 PM, Anthony Tuininga <span dir=3D"ltr">&lt;=
<a href=3D"mailto:[email protected]" target=3D"_blank">anthony.tui=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" =
style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><di=
v dir=3D"ltr"><div class=3D"gmail_extra"><div class=3D"gmail_quote"><div><d=
iv class=3D"h5">On Wed, Jul 5, 2017 at 8:21 AM, Anthony Tuininga <span dir=
=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank=
">[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"=
gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-=
left:1ex"><div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D=
"gmail_quote"><div><div class=3D"m_-4699702014505172771h5">On Wed, Jul 5, 2=
017 at 6:29 AM, Walter D=C3=B6rwald <span dir=3D"ltr">&lt;<a href=3D"mailto=
:[email protected]" target=3D"_blank">[email protected]</a>&gt;</sp=
an> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><span>On 4 Jul 2017, at 16:35,=
 Anthony Tuininga wrote:<br>
<br>
</span><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span>
On Tue, Jul 4, 2017 at 3:18 AM, Walter D=C3=B6rwald &lt;<a href=3D"mailto:w=
[email protected]" target=3D"_blank">[email protected]</a>&gt;<br>
wrote:<br>
<br>
</span><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span>
On 3 Jul 2017, at 15:59, Anthony Tuininga wrote:<br>
<br>
Hi Walter,<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<br>
DPI_DEBUG_LEVEL=3D7 causes a bunch of output that tells me which public<br>
ODPI-C functions are being called. The fact that you are not getting any<br=
>
at<br>
all suggests something is going wrong even before cx_Oracle code is<br>
involved. Can you try a few more things?<br>
<br>
1) Use python -v so you can see if the error is occurring prior to the<br>
actual import of cx_Oracle (it may not help but it might, too)<br>
<br>
</blockquote>
<br>
Here is the output of importing cx_Oracle in a verbose Python session:<br><=
/span>
[...]<span><br>
Traceback (most recent call last):<br>
=C2=A0 File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 961, in _=
find_and_load<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 950, in<b=
r>
_find_and_load_unlocked<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 648, in _=
load_unlocked<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 560, in m=
odule_from_spec<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap_external&gt;<wbr>&quot;, =
line 922, in<br>
create_module<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 205, in<b=
r>
_call_with_frames_removed<br>
UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte 0xe4 in pos=
ition 66:<br>
invalid continuation byte<br>
<br>
</span></blockquote>
<br><span>
Looks like it may have started running code in the module as the first<br>
thing it does is imports the datetime and decimal modules. If you&#39;re ab=
le<br>
to add some printf() statements at key positions in the Module_Initialize()=
<br>
function in src/cx_Oracle.c that would be helpful. In particular, at the<br=
>
very beginning (to confirm that it is running), after the imports, after<br=
>
the PyModule_Create() call, just prior to the dpiContext_create() call,<br>
just after it, and just at the end. I wish I could replicate this myself!<b=
r>
</span></blockquote>
<br>
We&#39;ve found the spot where the error occurs with the following patch:<b=
r>
<br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
<br>
C:\checkouts\python-cx_Oracle\<wbr>odpi&gt;git diff<br>
diff --git a/src/dpiOci.c b/src/dpiOci.c<br>
index f881bed..e588b1c 100644<br>
--- a/src/dpiOci.c<br>
+++ b/src/dpiOci.c<br>
@@ -1338,6 +1338,7 @@ static int dpiOci__loadLib(dpiError *error)<br>
=C2=A0#ifdef _WIN32<br>
=C2=A0 =C2=A0 =C2=A0DWORD length, errorNum;<br>
=C2=A0#endif<br>
+=C2=A0 =C2=A0 printf(&quot;Start dpiOci__loadLib()\n&quot;);<br>
<br>
=C2=A0 =C2=A0 =C2=A0// dynamically load the OCI library<br>
=C2=A0 =C2=A0 =C2=A0for (i =3D 0; !dpiOciLibHandle; i++) {<br>
@@ -1356,6 +1357,7 @@ static int dpiOci__loadLib(dpiError *error)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (length &gt; 3)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0loadError[len=
gth - 3] =3D &#39;\0&#39;;<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0else strcpy(loadError, &quo=
t;DLL load failed&quot;);<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 printf(&quot;loadError: %s\n&quo=
t;,loadError);<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}<br>
=C2=A0#else<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0dpiOciLibHandle =3D dlopen(libName, RTLD_=
LAZY);<br>
@@ -1370,6 +1372,7 @@ static int dpiOci__loadLib(dpiError *error)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return dpiError__set(error, &quot;load li=
brary&quot;, DPI_ERR_LOAD_LIBRARY,<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0loadError);<b=
r>
<br>
+=C2=A0 =C2=A0 printf(&quot;After LoadLibrary()\n&quot;);<br>
=C2=A0 =C2=A0 =C2=A0// validate library<br>
=C2=A0 =C2=A0 =C2=A0if (dpiOci__loadLibValidate(error<wbr>) &lt; 0) {<br>
=C2=A0#ifdef _WIN32<br>
<br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
<br>
With this patch, we get the following output:<br>
<br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex"><blockquote class=3D"gmail_quote" style=3D"m=
argin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;=
padding-left:1ex">
import cx_Oracle<br>
</blockquote></blockquote></blockquote>
Start dpiOci__loadLib()<br>
loadError: %1 ist keine zul=C3=B5ssige Win32-Anwendung<span><br>
Traceback (most recent call last):<br>
=C2=A0 File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 961, in _=
find_and_load<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 950, in _=
find_and_load_unlocked<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 648, in _=
load_unlocked<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 560, in m=
odule_from_spec<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap_external&gt;<wbr>&quot;, =
line 922, in create_module<br>
=C2=A0 File &quot;&lt;frozen importlib._bootstrap&gt;&quot;, line 205, in _=
call_with_frames_removed<br>
UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte 0xe4 in pos=
ition 66: invalid continuation byte<br>
<br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<wbr>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
<br></span>
&quot;%1 ist keine zul=C3=B5ssige Win32-Anwendung&quot; (which should read =
&quot;%1 ist keine zul=C3=A4ssige Win32-Anwendung&quot;, i.e. the &quot;=C3=
=B6&quot; should be an &quot;=C3=A4&quot;) means &quot;%1 is not an accepta=
ble win32 application&quot;.<br>
<br>
So we don&#39;t see the real problem because cx_Oracle fails to create the =
proper Unicode string from the OS error message.<br>
<br>
It&#39;s not clear what encoding this is (probable latin-1 or cp1252, but d=
efinitely *not* UTF-8). A<br>
<br>
=C2=A0 =C2=A0grep &#39;xe4.*LATIN SMALL LETTER A WITH DIAERESIS&#39; Lib/en=
codings/*.py<br>
<br>
in the Python source code returns 40 encodings that map the byte 0xE4 to =
=C3=A4.<br>
<br>
If the correct encoding can&#39;t be determined from the environment it mig=
ht be best to use a less strict error handling (like e.g. backslashreplace)=
 when decoding the bytes of the error message.<br></blockquote><div><br></d=
iv></div></div><div>Thanks, Walter. This is very helpful. We&#39;ll have to=
 see what makes the most sense in this case. Do you see information in the =
event log regarding this error?</div></div></div></div></blockquote><div><b=
r></div></div></div><div>I have discovered the source of the problem. I was=
 able to replicate the issue thanks to this pointer and have corrected it i=
n the source. If you can do a new pull and compile you should get the corre=
ct error message now. If you can confirm that would be helpful! Thanks.</di=
v></div></div></div></blockquote><div><br></div><div>Just to be clear since=
 the process is a bit different now: in your cx_Oracle repository you need =
to issue the following commands:</div><div><br></div><div>git pull</div><di=
v>git submodule update</div><div><br></div><div>That will update ODPI-C (wh=
ere the correction was made) as well as cx_Oracle itself.</div><div>=C2=A0<=
/div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le=
ft:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div class=3D"gmail_ex=
tra"><div class=3D"gmail_quote"><span class=3D""><div>=C2=A0</div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc so=
lid;padding-left:1ex"><div dir=3D"ltr"><div class=3D"gmail_extra"><div clas=
s=3D"gmail_quote"><span><div>=C2=A0</div><blockquote class=3D"gmail_quote" =
style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
And of cause it would help if %1 was resolved to a useful filename.<br></bl=
ockquote><div><br></div></span><div>Naturally. But that information isn&#39=
;t directly provided. I&#39;ll look into that, too.</div></div></div></div>=
</blockquote><div><br></div></span><div>This is a limitation of Windows and=
 there isn&#39;t much that can be done about it. Sorry!</div><div><div clas=
s=3D"h5"><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin=
:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><=
div class=3D"gmail_extra"><div class=3D"gmail_quote"><span><div>=C2=A0</div=
><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1=
px #ccc solid;padding-left:1ex">
<br>
But now for the real error...<br>
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
[...]<span><br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
<br>
I also note that you are using VS 2017. Another person noted that<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
uninstalling VS 2017 and using an earlier version worked for him -- why<br>
that would be is an interesting question (!!?) but if you have a machine<br=
>
that doesn&#39;t have VS 2017 but an earlier version that would be worth<br=
>
testing, too.<br>
<br>
</blockquote>
<br>
We currently don&#39;t have a Windows 10 machine without VS 2017, but we&#3=
9;re<br>
going to<br>
uninstall VS 2017 on this machine and retry with and an older version.<br>
<br>
Also, IIRC this exception means that the VS Redistributables are missing<br=
>
or are<br>
installed incorrectly.<br>
<br>
However I don&#39;t know how we can check this.<br>
</blockquote>
<br>
<br>
You can use this tool: <a href=3D"http://www.dependencywalker.com/" rel=3D"=
noreferrer" target=3D"_blank">http://www.dependencywalker.co<wbr>m/</a> whi=
ch will tell you<br>
what dependencies the cx_Oracle.pyd file and all of their dependencies,<br>
too. Hopefully it helps.<br>
</span></blockquote>
<br>
OK, we tried that. The output is here:<br>
<br>
=C2=A0 =C2=A0<a href=3D"http://styx.livinglogic.de/~walter/cx_Oracle/cx_Ora=
cle.cp36-win_amd64.txt" rel=3D"noreferrer" target=3D"_blank">http://styx.li=
vinglogic.de/~w<wbr>alter/cx_Oracle/cx_Oracle.cp36<wbr>-win_amd64.txt</a><b=
r>
<br>
dependencywalker seem that have many problems with this DLL, but what stick=
s out is VCRUNTIME140.dll. This seems to be part of the &quot;Visual C++ Re=
distributable for Visual Studio 2015&quot; which we downloaded from here:<b=
r>
<br>
=C2=A0 =C2=A0<a href=3D"https://www.microsoft.com/en-us/download/details.as=
px?id=3D48145" rel=3D"noreferrer" target=3D"_blank">https://www.microsoft.c=
om/en-<wbr>us/download/details.aspx?id=3D48<wbr>145</a><br>
<br>
(we&#39;ve downloaded vc_redist.x64.exe). When we install it, it complains =
that another version is already installed. After we&#39;ve uninstalled the =
2017 Redistributables installation works, but the output of &quot;import cx=
_Oracle&quot; remains the same.<br></blockquote><div><br></div></span><div>=
So the problem isn&#39;t resolved by the change of VS redistributable. Can =
you take a look in the event log? Can you also provide a list of all of the=
 VS redistributables you have installed? I am going to try to replicate thi=
s myself.</div><span><div>=C2=A0</div><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #ccc solid;padding-left:1ex">
[...]<br>
</blockquote><div class=3D"m_-4699702014505172771m_-4378990375602489051HOEn=
Zb"><div class=3D"m_-4699702014505172771m_-4378990375602489051h5">
<br>
Servus,<br>
=C2=A0 =C2=A0Walter<br>
<br>
------------------------------<wbr>------------------------------<wbr>-----=
-------------<br>
Check out the vibrant tech community on one of the world&#39;s most<br>
engaging tech sites, Slashdot.org! <a href=3D"http://sdm.link/slashdot" rel=
=3D"noreferrer" target=3D"_blank">http://sdm.link/slashdot</a><br>
______________________________<wbr>_________________<br>
cx-oracle-users mailing list<br>
<a href=3D"mailto:cx-oracle-users-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org" target=3D"_blank">=
[email protected]<wbr>rge.net</a><br>
<a href=3D"https://lists.sourceforge.net/lists/listinfo/cx-oracle-users" re=
l=3D"noreferrer" target=3D"_blank">https://lists.sourceforge.net/<wbr>lists=
/listinfo/cx-oracle-users</a><br>
</div></div></blockquote></span></div><br></div></div>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br></div></div>

--089e0822ed5c4e639a055399c3a8--


--===============0890342574243414879==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
--===============0890342574243414879==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
cx-oracle-users mailing list
cx-oracle-users-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/cx-oracle-users

--===============0890342574243414879==--