When I try to import psycopg2 it show below log for me:

Traceback (most recent call last): File "D:/Desktop/learn/python/webcatch/appserver/testpgsql.py", line 2, in <module> import psycopg2 File "D:/Desktop/learn/python/webcatch/appserver/webcatch/lib/site-packages/", line 50, in <module> from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID ImportError: No module named 'psycopg2._psycopg' 

How can I solve it? My platform is win10 (64) and version is python 3.5

4

12 Answers

Eureka! I pulled my hair out for 2 days trying to get this to work. Enlightenment came from this SO Question. Simply stated, you probably installed psycopg2 x64 version like I did, not realizing your python version was 32-bit. Unistall your current psycopg2, then:

Download: psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe from HERE, then run the following in a Terminal:

C:\path\to\project> easy_install /path/to/psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe C:\path\to\project> python manage.py makemigrations C:\path\to\project> python manage.py migrate 

You may also need to (re)create super user with:

C:\path\to\project> python manage.py createsuperuser 
4

I had the same problem, solved it in this way:

Reinstall the package psycopg2 using pip (by default installed with python 3)

On Linux:

pip uninstall psycopg2

Confirm with (y) and then:

pip install psycopg2

On Windows I add the prefix ('python -m') to the commands above. I think the problem occurs when you change the version of Python. (Even between minor versions such as Python 3.5 and 3.6).

2

I am using psycopg in an AWS Glue Job, where is harder to follow the instructions listed in the other answers.

What I did is installing psycopg2-binary into a directory and zip up the contents of that directory:

mkdir psycopg2-binary cd psycopg2-binary pip install psycopg2-binary -t . # in case using python3: # python3 -m pip install --system psycopg2-binary -t . zip -r9 psycopg2.zip * 

I then copied psycopg2.zip to an S3 bucket and add it as an extra Python library under "Python library path" in the Glue Spark job.

I then launched the job with the following script to verify if psycopg2 is present (the zip file will be downloaded by Glue into the directory in which the Job script is located)

from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job import sys import os import zipfile ## @params: [JOB_NAME] args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) zip_ref = zipfile.ZipFile('./psycopg2.zip', 'r') print os.listdir('.') zip_ref.extractall('/tmp/packages') zip_ref.close() sys.path.insert(0, '/tmp/packages') import psycopg2 print(psycopg2.__version__) job.commit() 
1

Download the compiled version of psycopg2 from this link . As psycopg2 is C library for python, which need to be compiled on linux to make it work. The compile instruction also given on that link. Thanks to the .

2

This also happens to me in new Ubuntu 18.04. It is caused by missing one file _psycopg.py in the /usr/local/lib/python3.7/site-packages/psycopg2.

It is fixed by:

  1. remove the old psycopg2 from your machine pip3 uninstall psycopg2.
  2. download new pyscopg2 manually from the official page
  3. tar xvf psycopg2-2.7.7.tar.gz
  4. python setup.py build
  5. sudo python setup.py install

I had this happen in Linux using Python 3.7. It is caused by missing one file _psycopg.cpython-37m-x86_64-linux-gnu.so in the /usr/local/lib/python3.7/site-packages/psycopg2. I downloaded _psycopg.cpython-37m-x86_64-linux-gnu.so from , and Copied this file into my anaconda lib.

I had this happen in Linux using Python 2 because I had accidentally had my PYTHONPATH set to Python 3 libraries, and it was trying to load the python3 version of psycopg2. Solution was to unset PYTHONPATH.

I had the same error on Windows, this worked for me: pip install -U psycopg2

I had an older version installed, must have depreciated

For lambda functions on Python 3.7, I ended up using the psycopg2-binary library mentioned in these threads:

Using psycopg2 with Lambda to Update Redshift (Python)

pip3 install psycopg2-binary==2.8.3 

Snippet from these links:

I ended up using a different library: psycopg2-binary in my requirement.txt file and it working fine now.

solved it by using psycopg2-binary==2.8.3

I came to know that most times the WINDOWS packaging does not go fine with LAMBDA.

I faced same issue while running LAMBDA with WINDOWS installed 3rd party pscyopg2 packaging.

Solution:

step1>
I installed psycopg2 in Linux.
Copied both the directories psycopg2_binary-2.8.2.dist-info and psycopg2 from Linux to windows.

step2>
Along with source *.py, packaged with copied 3rd party dependencies psycopg2 in windows to *.zip file

step3>
Upload the file to LAMBDA - Here it goes, It runs successfully without any error.

0

for mac M1 users (can try for other users as well),

pip uninstall psycogp2

then

pip install psycopg2-binary

It works in my case.

For Mac python mycode.py migrate fixed the import issue

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy