I recently upgraded my OS to High Sierra, and since then I have not been able to use the sqlanydb library with my flask app. I was using SQLAnywhere16 and recently upgraded to SQLAnywhere17 after reading that it might solve problem, but it did not. I start by sourcing sa_config.sh located at /Applications/SQLAnywhere17/System/bin64/sa_config.sh. Then I run my flask app. In the initialization of my app, I create a connection using sqlanydb.connect(), and I am met with the following traceback.
When I run the python3.6 interpreter, I am able to import the sqlanydb and connect to my database just fine, with no error. But when I try to connect inside my flask app, I get this error. |
I'm posting this as a solution because it at least solves my current problem. However, I think this is worth looking into more, and I'll be taking this problem to the Flask contributors. It seems that when I run flask the following way, I get all of the errors that I have mentioned.
This seems to wipe out the added key:
If anyone on this forum has an explanation for what I'm seeing, I'm all ears. This is all very confusing. Again, everything worked just fine until I upgraded to High Sierra, so I suspect that must have some part to play. |
High Sierra will "purge" DYLD_LIBRARY_PATH now for protected processes - see the docs from Apple. Ah, I see. Thank you for pointing me in the right direction.
(23 Feb '18, 16:06)
midnight_mil...
|
Update.
When I open a python interpreter, or just run a plain python script, I added these lines to make sure that sourcing sa_config.sh was definitely adding the paths to my environment.
print(os.environ['PATH']) print(os.environ['NODE_PATH']) print(os.environ['DYLD_LIBRARY_PATH'])
Running those lines in the python interpreter or in a plain python script, it prints out the correct paths. However, when I added those three lines to just above the line where my flask app was breaking, it prints out the correct paths for the first two, but a key error is raised on $DYLD_LIBRARY_PATH. Apparently flask is unable to see the library path added by sa_config.sh. When I run
echo $DYLD_LIBRARY_PATH
in a terminal, it prints the path just fine. So then is flask not using the right environment? Why is flask unable to see the updated library path?