簡體   English   中英

virtualenved python無法導入內置的sqlite3

[英]virtualenved python cannot import built-in sqlite3

我的操作系統是Linuxmint 17(本質上是Ubuntu 14.04 Trusty),它已經預裝了python 2.7.6,所以當我這樣做時:

$ python -v
>>> import _sqlite3 
>>> # dynamically loaded from /usr/lib/python2.7/lib-dynload/_sqlite3.x86_64-linux-gnu.so

在每個項目需要的另一方面,我從源代碼編譯了python 2.7.8,我使用以下命令創建了virtualenv:

virtualenv ~/.venv-python2.7.8/my_project/ -p ~/.localpython-2.7.8/bin/python2.7 --system-site-packages

所以我得到了一個隔離的python / pip / django環境,可以肯定地得到以下信息:

(my_project)wayne@wayne-linuxmint17 ~/Projects/adsk_devportal $ which python
/home/wayne/.venv-python2.7.8/my_project/bin/python
(my_project)wayne@wayne-linuxmint17 ~/Projects/adsk_devportal $ python --version
Python 2.7.8

但是,在虛擬化環境下, 我無法導入python內置的sqlite3

$ python -v

>>> import sqlite3
import sqlite3 # directory /home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3
# /home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/__init__.pyc matches /home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/__init__.py
import sqlite3 # precompiled from /home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/__init__.pyc
# /home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/dbapi2.pyc matches /home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/dbapi2.py
import sqlite3.dbapi2 # precompiled from /home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/dbapi2.pyc
# /home/wayne/.localpython-2.7.8/lib/python2.7/collections.pyc matches /home/wayne/.localpython-2.7.8/lib/python2.7/collections.py
import collections # precompiled from /home/wayne/.localpython-2.7.8/lib/python2.7/collections.pyc
dlopen("/home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/_collections.so", 2);
import _collections # dynamically loaded from /home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/_collections.so
dlopen("/home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/operator.so", 2);
import operator # dynamically loaded from /home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/operator.so
# /home/wayne/.localpython-2.7.8/lib/python2.7/keyword.pyc matches /home/wayne/.localpython-2.7.8/lib/python2.7/keyword.py
import keyword # precompiled from /home/wayne/.localpython-2.7.8/lib/python2.7/keyword.pyc
# /home/wayne/.localpython-2.7.8/lib/python2.7/heapq.pyc matches /home/wayne/.localpython-2.7.8/lib/python2.7/heapq.py
import heapq # precompiled from /home/wayne/.localpython-2.7.8/lib/python2.7/heapq.pyc
dlopen("/home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/itertools.so", 2);
import itertools # dynamically loaded from /home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/itertools.so
dlopen("/home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/_heapq.so", 2);
import _heapq # dynamically loaded from /home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/_heapq.so
import thread # builtin
dlopen("/home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/datetime.so", 2);
import datetime # dynamically loaded from /home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/datetime.so
dlopen("/home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/time.so", 2);
import time # dynamically loaded from /home/wayne/.venv-python2.7.8/my_project/lib/python2.7/lib-dynload/time.so
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
    from dbapi2 import *
  File "/home/wayne/.localpython-2.7.8/lib/python2.7/sqlite3/dbapi2.py", line 28, in <module>
    from _sqlite3 import *
ImportError: No module named _sqlite3

我可以知道這是什么根本原因嗎? 解決此問題的最簡單方法是什么?

非常感謝您的任何建議!

嗯,

該鏈接可能有幫助https://github.com/NixOS/nixpkgs/issues/492#issuecomment-40740803

不知道是否可以通過更改virtualenv來解決您的問題

diff --git a/virtualenv.py b/virtualenv.py
index 0f5ae79..cfd19bd 100755
--- a/virtualenv.py
+++ b/virtualenv.py
@@ -1191,6 +1191,11 @@ def install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages, clear, sy
     site_filename_dst = change_prefix(site_filename, home_dir)
     site_dir = os.path.dirname(site_filename_dst)
     writefile(site_filename_dst, SITE_PY)
+    wrapper_path = join(prefix, "lib", py_version, "site-packages")
+    writefile(
+        join(site_dir, 'sitecustomize.py',),
+        "import sys; sys.path.append('%s')" % wrapper_path
+    )
     writefile(join(site_dir, 'orig-prefix.txt'), prefix)
     site_packages_filename = join(site_dir, 'no-global-site-packages.txt')
     if not site_packages:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM