39

When I upgrade my Ubuntu into 14.04 from 12.04, this time I get this error:

 ImportError: No module named datetime
tshepang
  • 12,111
  • 21
  • 91
  • 136
akbsmile
  • 1,119
  • 2
  • 11
  • 15

11 Answers11

60

This happened to me when I created a virtualenv and then upgraded from 12.04 to 14.04.

I had to delete my virtualenv and recreate it, and after doing that, everything worked again.

erjiang
  • 44,417
  • 10
  • 64
  • 100
40

Just run this command. It worked like a charm!

$ cp /usr/bin/python2.7 $(which python2.7)

This just happened to me after the 14.10 update, and it seems to be because my virtual environments have old copies of /usr/bin/python2.7 that — unlike the new binary — do not include datetime built-in, and so get an error when they cannot find it on disk anywhere. The new interpreter seems to import it without any file I/O (try running it under strace to check).

More info here

Community
  • 1
  • 1
artisare
  • 501
  • 4
  • 4
  • 1
    I took this a step further, "rm venv/bin/python*", then reinitialize with "virtualenv venv". Less destructive compared to rebuilding the whole venv. – Kevin Aug 07 '15 at 15:50
  • 7
    **You deserve a coffee! Thanks :)** - Also caused by upgrading underlying `Ubuntu 14.04` to `Ubuntu 16.04.1` without touching the virtual environment. – Flatron Sep 19 '16 at 08:53
10

I tried to re-install it by these steps.

1. remove the old version of venv
2. virtualenv venv
3. .venv/activate/bin
4. pip install -r requirements/ requirements.txt

And it works perfectly. Thanks guys :)

akbsmile
  • 1,119
  • 2
  • 11
  • 15
10

just reinitialize the virtualenv by:

cd <virtualenv-dir>
virtualenv .
Hasan Ramezani
  • 5,004
  • 24
  • 30
  • 2
    This worked for me with one change. 'virtualenv .' gave me the error: 'IOError: [Errno 40] Too many levels of symbolic links' so I did: 'rm bin/python*' and then 'virtualenv .' succeeded. – saschwarz Oct 24 '16 at 15:00
8

If by chance you come across this error while trying to renew your LetsEncrypt certificate (like I did) I found the solution here:

https://askubuntu.com/a/850669/668101

Remove this folder and rerun LetsEncrypt and it will recreate all the relevant files and avoid the error from this thread.

rm ~/.local/share/letsencrypt -R
Community
  • 1
  • 1
dug
  • 340
  • 3
  • 7
  • 1
    Good tip! Thanks for the info!! The only thing is that the term "thread" doesn't really apply to StackOverflow as this is not a discussion forum, but a Q&A site :) Otherwise, this was really helpful! Thanks! – Daniel Gray Apr 03 '17 at 10:40
6

If you use virtualenv, updating it might solve this issue

virtualenv /path/to/old/virtualenv/
Seg-mel
  • 63
  • 1
  • 3
3

Try...

>>> import sys
>>> sys.path
[... '/usr/local/lib/python2.7/lib-dynload',...]

if lib-dynload not included in sys.path, You could not import datetime

check it!

han058
  • 908
  • 8
  • 19
  • had to create the lib-dynload directory and copy paste contents of Python-2.7.*/build/lib.linux-***-2.7 into it – korwalskiy Nov 15 '19 at 12:09
1

Same happened to me on upgrading Ubuntu from 14.04 to 15.10.

I solved it by upgrading pip and then removing and recreating the virtual env:

$ easy_install --upgrade pip
$ rmvirtualenv <my_virtual_env>
$ mkvirtualenv <my_virtual_env>

(I use virtualenvwrapper)

Walter B
  • 655
  • 6
  • 8
1
  1. clear virtual env, consider VIRTUAL is the name of the virtual environment

    virtualenv --clear VIRTUAL

  2. Now activate it and install from requirements.txt

    source VIRTUAL/bin/activate pip install -r requirements.txt

Aneesh R S
  • 3,807
  • 4
  • 23
  • 35
0

If you face datetime import issue using IntelliJ PyCharm or Idea and from Console/Terminal it works fine, you should just duplicate/recreate running configurations.

0

I ran across this error with LetsEncrypt trying to renew and in order to fix I had to go back to the letsencrypt site and reinstall certbot because they have changed how it works on Ubuntu.

https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx

Here are the commands I ended up running, your commands may be different.

snap was not installed in my Ubuntu instance

sudo apt install snapd 
sudo snap install core; sudo snap refresh core

remove the old certbot

sudo apt-get remove certbot
sudo snap install --classic certbot

make the "certbot" command work with old config

sudo ln -s /snap/bin/certbot /usr/bin/certbot

run a couple tests

sudo certbot --nginx
sudo certbot renew --dry-run

Actually renew and restart server

sudo certbot renew
sudo /opt/bitnami/ctlscript.sh restart nginx

Update cronjob

Then I needed to update my cronjob so that it used sudo certbot renew instead of the full path to certbot that I was using before.

crontab -e

contents of crontab

42 3,15 * * * sudo certbot renew --quiet --no-self-upgrade
24 1,18 * * * sudo certbot renew --quiet --no-self-upgrade
5 4 * * 7 sudo /opt/bitnami/ctlscript.sh restart nginx
Richard
  • 5,584
  • 1
  • 19
  • 22