Re: [cx-oracle-users] Using cx_Oracle 6.0rc1 on Windows
Brought to you by:
atuining
From: Anthony T. <ant...@gm...> - 2017-07-05 22:46:03
|
On Wed, Jul 5, 2017 at 4:12 PM, Anthony Tuininga <ant...@gm... > wrote: > On Wed, Jul 5, 2017 at 8:21 AM, Anthony Tuininga < > ant...@gm...> wrote: > >> >> >> On Wed, Jul 5, 2017 at 6:29 AM, Walter Dörwald <wa...@li...> >> wrote: >> >>> On 4 Jul 2017, at 16:35, Anthony Tuininga wrote: >>> >>> On Tue, Jul 4, 2017 at 3:18 AM, Walter Dörwald <wa...@li...> >>>> wrote: >>>> >>>> On 3 Jul 2017, at 15:59, Anthony Tuininga wrote: >>>>> >>>>> Hi Walter, >>>>> >>>>>> >>>>>> DPI_DEBUG_LEVEL=7 causes a bunch of output that tells me which public >>>>>> 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 the >>>>>> 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 the >>>> very beginning (to confirm that it is running), after the imports, after >>>> 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: >>> >>> ============================================================ >>> ==================== >>> >>> 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 = 0; !dpiOciLibHandle; i++) { >>> @@ -1356,6 +1357,7 @@ static int dpiOci__loadLib(dpiError *error) >>> if (length > 3) >>> loadError[length - 3] = '\0'; >>> else strcpy(loadError, "DLL load failed"); >>> + printf("loadError: %s\n",loadError); >>> } >>> #else >>> dpiOciLibHandle = 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 >>> >>> ============================================================ >>> ==================== >>> >>> With this patch, we get the following output: >>> >>> ============================================================ >>> ==================== >>> >>> import cx_Oracle >>>>>> >>>>> Start dpiOci__loadLib() >>> loadError: %1 ist keine zulõssige 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 >>> >>> ============================================================ >>> ==================== >>> >>> "%1 ist keine zulõssige Win32-Anwendung" (which should read "%1 ist >>> keine zulässige Win32-Anwendung", i.e. the "ö" should be an "ä") 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 to >>> ä. >>> >>> 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 regarding >> 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 now. > 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=48145 >>> >>> (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_Oracle" >>> 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 this >> 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-...@li... >>> https://lists.sourceforge.net/lists/listinfo/cx-oracle-users >>> >> >> > |