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:12:18
|
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. > > >> >> 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 >> > > |