2017-04-21 34 views
4

Ubuntu 16.04 LTS,試圖安裝與pip cpickle。我查了一下,還沒有找到有用的東西。pip安裝泡菜不工作 - 沒有這樣的文件或目錄

PYTHONPATH未設置。

錯誤消息

[email protected]:~$ sudo -H pip3 install cpickle 
Collecting cpickle 
    Using cached cpickle-0.5.tar.gz 
    Complete output from command python setup.py egg_info: 
    Traceback (most recent call last): 
     File "<string>", line 1, in <module> 
     File "/usr/lib/python3.5/tokenize.py", line 454, in open 
     buffer = _builtin_open(filename, 'rb') 
    FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-build-wn926hef/cpickle/setup.py' 

    ---------------------------------------- 
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-wn926hef/cpickle/ 
You are using pip version 8.1.1, however version 9.0.1 is available. 
You should consider upgrading via the 'pip install --upgrade pip' command. 


    ---------------------------------------- 
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-q46tq1l8/cpickle/ 
You are using pip version 8.1.1, however version 9.0.1 is available. 
You should consider upgrading via the 'pip install --upgrade pip' command. 

排查步驟

# version info 
[email protected]:~$ python --version 
Python 2.7.12 
[email protected]:~$ python3 --version 
Python 3.5.2 

# I don't think cache is the problem 
rm -rf ~/.cache/ 
sudo -H pip install cpickle --no-cache-dir # same problem 
sudo -H pip3 install cpickle --no-cache-dir # same problem 
+2

這是什麼版本的Python? Python 2.7和3。4來與cPickle – lordingtar

+0

看起來像你的'python'是python ** 3 **。 'pip'用於python2。請安裝'pip3' ......並使用pip3爲Python3安裝模塊。 –

+0

剛剛更新問題的版本,ctrl + f的「版本」 – invapid

回答

8

檢查在interweb,我發現這個

enter image description here

在Python 2.x的一個常見的模式是有一個版本一個以純Python實現的模塊,一個可選的加速版本作爲C擴展實現;例如,泡菜和cPickle。

這會導致加載版本的導入以及這些模塊的每個用戶的純Python版本的負擔。在Python 3.0中,加速版本被認爲是純Python版本的實現細節。

用戶應該始終導入標準版本,該版本會嘗試導入加速版本並回退到純Python版本。 pickle/cPickle對接受了這種治療。配置文件模塊在3.1的列表中。 StringIO模塊已經變成了io模塊中的一個類。

這意味着Python3它作爲一個庫...

import _pickle as cPickle 
+2

(a)當您複製並粘貼文本時,您爲什麼會發布文字圖片? (b)你在哪裏找到這個文本? – jwodder

+2

Andy的答案有效。我還發現你可以使用'from six.moves import cPickle'來同時支持python2和python3 – invapid

+0

歡呼你的評論@invapid –

0

cPickle是Python的標準庫的一部分;你不用pip安裝它。在Python 2中,it comes installed with Python。在Python 3,quoting the release notes與加上強調:

在Python 2.x的一個常見的模式是爲在純Python實施,作爲C擴展實現的可選加速版本的模塊中的一個版本;例如,泡菜和cPickle。這導致了加載版本的導入以及這些模塊的每個用戶的純Python版本的負擔。 在Python 3.0中,加速版本被認爲是純Python版本的實現細節。用戶應該始終導入標準版本,該版本試圖導入加速版本並回退到純Python版本。 pickle/cPickle對接受了這種處理。

在試圖安裝cpickle與PIP特定情況下,一些Pythonista決定告知人們,這是錯誤的做法,因此註冊cpickle項目(與後標準庫模塊命名爲無數人一起)和給它一個setup.py,它什麼也不做,只是退出時出現錯誤「Package 'cpickle' must not be downloaded from pypi」。然而,在創建軟件包或者在PyPI的結尾導致源代碼分發文件格式不正確,導致您在這裏看到錯誤時,似乎出現了錯誤。因此,即使這個錯誤得到解決,你仍然會得到一個不同的錯誤,告訴你不要做你想做的事情。

相關問題