Skip to content

Instantly share code, notes, and snippets.

@ivanalejandro0
Last active August 29, 2015 14:20
Show Gist options
  • Save ivanalejandro0/d1ac4493892730a30d2b to your computer and use it in GitHub Desktop.
Save ivanalejandro0/d1ac4493892730a30d2b to your computer and use it in GitHub Desktop.
Environment variable tests using python c-api.
#include <Python.h>
#include <iostream>
#include <cstdlib>
// compile with:
// g++ -o env env.cpp -O2 -Wall -Wno-long-long -pedantic -pthread $(pkg-config --cflags --libs python2)
void show_paths() {
std::string env_path;
env_path = std::getenv("PATH");
if (env_path.c_str())
std::cout << "PATH: " << env_path << std::endl;
else
std::cout << "PATH: NULL" << std::endl;
const char *search_path = Py_GetPath();
if (search_path != NULL) {
// if there is a path to use append it to our custom search path as a fallback
std::cout << "Py_GetPath: " << search_path << std::endl;
} else {
std::cout << "Py_GetPath: NULL" << std::endl;
}
}
int main()
{
std::cout << "Environment variables test" << std::endl << std::endl;
show_paths();
}
@ivanalejandro0
Copy link
Author

leap@leap-ubuntu-14:~/Bitmask-linux64-0.8.1$ ./env
Environment variables test

PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Py_GetPath: /usr/lib/python2.7/:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload
leap@leap-ubuntu-14:~/Bitmask-linux64-0.8.1$ ./bitmask.test -d
No updates found
/home/leap/Bitmask-linux64-0.8.1/./apps/:/home/leap/Bitmask-linux64-0.8.1/./lib/
Py_GetPath: /usr/lib/python2.7/:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload
PYTHONPATH: NULL
pypath: /home/leap/Bitmask-linux64-0.8.1/./apps/:/home/leap/Bitmask-linux64-0.8.1/./lib/
fallback_python_path: /home/leap/Bitmask-linux64-0.8.1/./apps/:/home/leap/Bitmask-linux64-0.8.1/./lib/:/usr/lib/python2.7/:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload
full_path: /home/leap/Bitmask-linux64-0.8.1/.

Traceback (most recent call last):
  File "/usr/lib/python2.7/site.py", line 563, in <module>
    main()
  File "/usr/lib/python2.7/site.py", line 545, in main
    known_paths = addusersitepackages(known_paths)
  File "/usr/lib/python2.7/site.py", line 272, in addusersitepackages
    user_site = getusersitepackages()
  File "/usr/lib/python2.7/site.py", line 247, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/usr/lib/python2.7/site.py", line 237, in getuserbase
    USER_BASE = get_config_var('userbase')
  File "/usr/lib/python2.7/sysconfig.py", line 582, in get_config_var
    return get_config_vars().get(name)
  File "/usr/lib/python2.7/sysconfig.py", line 528, in get_config_vars
    _init_posix(_CONFIG_VARS)
  File "/usr/lib/python2.7/sysconfig.py", line 412, in _init_posix
    from _sysconfigdata import build_time_vars
  File "/usr/lib/python2.7/_sysconfigdata.py", line 6, in <module>
    from _sysconfigdata_nd import *
ImportError: No module named _sysconfigdata_nd
leap@leap-ubuntu-14:~/Bitmask-linux64-0.8.1$ 

The odd thing is that Py_GetPath is returning different value depending on where is called from.

@ivanalejandro0
Copy link
Author

The important parts:

# env
Py_GetPath: /usr/lib/python2.7/:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload

# launcher
Py_GetPath: /usr/lib/python2.7/:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment