libpython2.7.so.1.0: cannot open shared object file: No such file or directory
Categories:
Resolving 'libpython2.7.so.1.0: cannot open shared object file' Errors

This article guides you through diagnosing and fixing the common 'libpython2.7.so.1.0: cannot open shared object file: No such file or directory' error, often encountered when running Python 2.7 applications or tools.
The error message libpython2.7.so.1.0: cannot open shared object file: No such file or directory
is a common problem for developers and system administrators working with Python 2.7 applications on Linux-based systems. This error indicates that the dynamic linker cannot find the required Python 2.7 shared library (libpython2.7.so.1.0
) at runtime. This often happens due to incorrect installation, missing environment variables, or conflicts with other Python versions.
Understanding Shared Libraries and the Dynamic Linker
Shared libraries (also known as dynamic link libraries or DLLs on Windows) are collections of pre-compiled code that can be loaded into memory by multiple programs at runtime. This saves disk space and memory, as the code doesn't need to be duplicated for each application. On Linux, these files typically have a .so
extension (e.g., libpython2.7.so.1.0
).
The dynamic linker (ld.so
or ld-linux.so
) is responsible for locating and loading these shared libraries when a program starts. It searches for libraries in a predefined set of directories, which include standard system paths, paths specified in the LD_LIBRARY_PATH
environment variable, and paths configured in /etc/ld.so.conf
.
flowchart TD A[Application Execution] --> B{Dynamic Linker (ld.so) invoked} B --> C{Check LD_LIBRARY_PATH} C --> D{Check /etc/ld.so.conf paths} D --> E{Check standard system paths (e.g., /lib, /usr/lib)} E --> F{Is libpython2.7.so.1.0 found?} F -->|Yes| G[Application starts successfully] F -->|No| H["Error: libpython2.7.so.1.0: cannot open shared object file"]
Dynamic Linker's Search Process for Shared Libraries
Common Causes and Solutions
The 'No such file or directory' error for libpython2.7.so.1.0
typically stems from a few key issues. Addressing these systematically can help resolve the problem.
which python2.7
and find / -name libpython2.7.so.1.0 2>/dev/null
to get an initial understanding.Solution 1: Install or Reinstall Python 2.7
The most straightforward reason for this error is that Python 2.7 or its development libraries are not installed on your system, or they were removed. Installing the correct package for your distribution will usually place the shared library in a standard location where the linker can find it.
# For Debian/Ubuntu-based systems:
sudo apt-get update
sudo apt-get install python2.7
sudo apt-get install libpython2.7-dev
# For Red Hat/CentOS-based systems:
sudo yum install python27
sudo yum install python27-devel
Installing Python 2.7 and its development libraries
Solution 2: Update LD_LIBRARY_PATH
The LD_LIBRARY_PATH
environment variable tells the dynamic linker where to look for shared libraries. If libpython2.7.so.1.0
is installed but in a non-standard location (e.g., a custom build or a virtual environment), you might need to add its directory to this variable.
# Find the location of libpython2.7.so.1.0
find /usr/local /opt /home -name libpython2.7.so.1.0 2>/dev/null
# Example: If found in /usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
# To make it permanent, add to your shell's profile (e.g., ~/.bashrc or ~/.profile)
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
Setting the LD_LIBRARY_PATH environment variable
LD_LIBRARY_PATH
globally can sometimes lead to unexpected behavior or conflicts with other applications. Use this method cautiously and prefer system-wide configuration (Solution 3) if possible.Solution 3: Configure System-Wide Library Paths with ldconfig
For a more robust and system-wide solution, you can add the directory containing libpython2.7.so.1.0
to the dynamic linker's configuration files. This is typically done by creating a new .conf
file in /etc/ld.so.conf.d/
and then updating the linker cache.
1. Locate the library
First, find the exact path to libpython2.7.so.1.0
. A common location for custom Python installations is /usr/local/lib
.
2. Create a new configuration file
Create a new file, for example, /etc/ld.so.conf.d/python27.conf
, and add the path to your Python 2.7 library directory. Replace /path/to/python2.7/lib
with the actual path you found.
3. Update the dynamic linker cache
Run sudo ldconfig
to rebuild the dynamic linker's cache. This command reads the configuration files and updates the /etc/ld.so.cache
file, making the new library path available to all applications.
# Example: If libpython2.7.so.1.0 is in /usr/local/lib
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/python27.conf'
sudo ldconfig
Adding a library path to ld.so.conf.d and updating the cache
Solution 4: Create a Symbolic Link
If the library exists but is in a location not searched by the linker, and you prefer not to modify LD_LIBRARY_PATH
or ld.so.conf
, you can create a symbolic link from a standard library directory to the actual location of libpython2.7.so.1.0
.
# Find the actual location of libpython2.7.so.1.0
# Example: /opt/python2.7/lib/libpython2.7.so.1.0
# Create a symbolic link in a standard library path (e.g., /usr/lib)
sudo ln -s /opt/python2.7/lib/libpython2.7.so.1.0 /usr/lib/libpython2.7.so.1.0
# If /usr/lib64 is more appropriate for your system:
sudo ln -s /opt/python2.7/lib/libpython2.7.so.1.0 /usr/lib64/libpython2.7.so.1.0
Creating a symbolic link to the Python 2.7 shared library