簡體   English   中英

Ubuntu Oneiric 11.10問題中的兩個Python版本沖突:ImportError:無模塊

[英]Two Python Version conflict in Ubuntu Oneiric 11.10 issue: ImportError: No module

我使用make install而不是altinstall安裝了python 2.7.5

以前是2.7.2+

現在當我運行python時

ImportError: cannot import name MAXREPEAT

我知道這里已經有與此相關的條目。 但是我沒有安裝virtualenv,也沒有安裝過。

如果我運行python2.7它將運行完美。 現在,當我嘗試導入像mysqldb這樣的庫時,它說該模塊不存在。 我在安裝python2.7之前安裝了它。

解決辦法是什么? 我應該卸載整個python還是應該只卸載python2.7.5還是應該保留它? 如果我保留那個,那我該如何導入那些模塊?

** 最新更新**

me@me:/usr/local/bin$ dir python2*
python2  python2-config  python2.7  python2.7-config

和:

/usr/local/bin$ ls -l
total 1776
-rwxrwxr-x 1 root root     101 Jul 17 20:17 2to3
-r-xr-xr-x 1 root root    7223 Mar 31 20:47 config_data
-rwxr-xr-x 1 root root     299 Jul 18 20:53 easy_install
-rwxr-xr-x 1 root root     307 Jul 18 20:53 easy_install-2.7
-rwxrwxr-x 1 root root      99 Jul 17 20:17 idle
-r-xr-xr-x 1 root root    3910 Mar 31 20:47 json_pp
-r-xr-xr-x 1 root root     487 Mar 31 20:47 package-stash-conflicts
-rwxr-xr-x 1 root root     281 Jul 17 19:51 pip
-rwxr-xr-x 1 root root     289 Jul 17 19:51 pip-2.7
-rwxrwxr-x 1 root root      84 Jul 17 20:17 pydoc
lrwxrwxrwx 1 root root       7 Jul 18 23:04 python -> python2
lrwxrwxrwx 1 root root      14 Jul 18 23:04 python-config -> python2-config
lrwxrwxrwx 1 root root       9 Jul 18 23:04 python2 -> python2.7
lrwxrwxrwx 1 root root      16 Jul 18 23:04 python2-config -> python2.7-config
-rwxr-xr-x 1 root root 1737376 Jul 18 23:03 python2.7
-rwxr-xr-x 1 root root    1674 Jul 18 23:04 python2.7-config
-rwxrwxr-x 1 root root   18547 Jul 17 20:17 smtpd.py
-rwxr-xr-x 1 root root     316 Jul 18 21:10 virtualenv
-rwxr-xr-x 1 root root     324 Jul 18 21:10 virtualenv-2.7

將重新安裝此解決方案解決了在ubuntu中獲取並運行默認2.7.2+的問題嗎?: https ://launchpad.net/ubuntu/oneiric/+source/python-defaults/2.7.2-7ubuntu2

*之前的更新*

現在我可以從bash運行python

這是新問題。 這是我使用pip安裝的每個模塊的一部分。

可以導入lib中現有的模塊,但是不能重新安裝新安裝的模塊:

me:~$ sudo pip install requests
Downloading/unpacking requests
  Downloading requests-1.2.3.tar.gz (348kB): 348kB downloaded
  Running setup.py egg_info for package requests

Installing collected packages: requests
  Running setup.py install for requests

Successfully installed requests
Cleaning up...
me:~$ python -i
Python 2.7.5 (default, Jul 17 2013, 20:16:12)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named requests
>>>

檢查python版本后,它在本地運行,以解決沖突問題:

me:~$ python
Python 2.7.5 (default, Jul 17 2013, 20:16:12)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
me:~$ sudo python
[sudo] password for me:
Python 2.7.5 (default, Jul 17 2013, 20:16:12)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
me:~$ which python
/usr/local/bin/python
me:~$ sudo which python
/usr/local/bin/python
me:~$ sudo which python2.7
/usr/local/bin/python2.7
me:~$ which python2.7
/usr/local/bin/python2.7

我認為它運行相同。 接着..

me:/usr/local/bin$ dir python2.7
python2.7
me:/usr/local/bin$ cd /usr/bin
me:/usr/bin$ dir python2.7
python2.7

me:/bin$ cd /usr/bin
me:/usr/bin$ dir python
python

me:/usr/local/bin$ dir python
python
me:/usr/local/bin$ dir python2.7
python2.7

還要檢查以下內容:

~$ which pip
/usr/local/bin/pip

好的,現在我安裝了virtualenv,這就是我所做的

(foldername)me@me:~/caller$ sudo pip install requests
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/local/lib/python2.7/dist-packages
Cleaning up...
(foldername)me@me:~/caller$ python -i
Python 2.7.2+ (default, Jul 20 2012, 22:15:08)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

現在我們可以看到2.7.2+又回來了! 那么現在發生了什么呢? 怎么了?

不建議從linux卸載較舊的python。 那么我該如何運行帶有2.7.5而不是2.7.2+的virtualenv?

安裝python時,請執行以下步驟
使用前綴指定安裝目錄

 ./configure --prefix=/scratch/bin/
 make
 sudo make install

然后,每次您運行新的終端時,您都要指定

export PATH="$PATH:/scratch/bin/"

告訴Python的安裝目錄在哪里

這樣,您可以使用任意數量的python

您是否使用apt-get或從源代碼構建了它?

如果是從源代碼構建的,則確定安裝成功完成了嗎? 通常,為了從源代碼構建Python,必須執行以下步驟

  • ./configure
  • make
  • sudo make install (可能不需要sudo ,但是make腳本將嘗試更改/usr/目錄中的文件。

在您的python來源目錄中。 除其他命令外,最后一個命令將python復制到/usr/目錄。 如果要在其他地方安裝它,則必須將--path=XXX (如果我沒記錯的話)傳遞給./configure

pip是一個Python程序。 當您從命令行運行pip ,它將使用特定的Python可執行文件來運行該程序。 pip將安裝模塊的位置在那里 Python可執行文件可以找到它們。

當您運行sudo pip install some_package ,操作系統會在shebang行上確定要運行的Python可執行文件。

輸入which pip並查看文件的第一行,以查看其鏈接到哪個python可執行文件。

要為新的python2.7.5安裝軟件包,可以安裝新的pip 或者,您可以只運行/usr/local/bin/python pip ... ,但是我認為管理多個python安裝的最簡單方法是使用virtualenv

如果您使用virtualenv(我強烈建議),則會自動安裝一個新的pip因為它是其依賴項之一。 如果您走這條路,我建議您也安裝virtualenvwrapper

如果您全局安裝pip,請注意以下行

python get-pip.py

要么

python setup.py install

您在此行上使用的python可執行文件設置了該pip版本與該python版本之間的“鏈接”。


如何使用checkinstall刪除自定義的Python:

sudo apt-get install libsqlite3-dev libgdbm-dev liblzma-dev checkinstall
sudo apt-get build-dep python

http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
tar xvjf Python-2.7.5.tar.bz2
cd Python-2.7.5
# inspect the options
./configure --help  
./configure
make
make test
sudo checkinstall -D --fstrans=no make install

# Accept the default answers EXCEPT that you MUST change the name to something
# other than python. That way, the name of your custom package does not conflict
# with the name of Ubuntu's "python" package

        Should I create a default set of package docs?  [y]: 
        Enter a number to change any of them or press ENTER to continue: 2
        Enter new name: 
        >> python275

        Copying files to the temporary directory...OK
        # wait, wait, wait...

# python2.7.5 is now installed in /usr/local/bin
# remove it with:
sudo dpkg -r python275

暫無
暫無

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

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