2017-02-27 25 views
1

當嘗試使用谷歌API客戶端,我已經得到了一個錯誤,許多人都得到了:使用六個比1.4.1更高版本上運行的python腳本

AttributeError: 'Module_six_moves_urllib_parse' object has no attribute 'urlencode'

我都想盡在StackOverflow的,GitHub上,和其他地方,包括髮現溶液:

1)從this thread,改變在實際的代碼的路徑:

import sys 
sys.path.insert(1, '/Library/Python/2.7/site-packages') 

2)從this thread,改變在.bashrc中和的.bash_profile文件Python路徑:

pip show six | grep "Location:" | cut -d " " -f2 
export PYTHONPATH=$PYTHONPATH:<pip_install_path> 
source ~/.bashrc 

3)和從this thread,降級我的谷歌API客戶端1.3.2(或至少試圖)。

我是編程新手,所以這可能是一個基本問題,但我花了好幾天的時間來嘗試排除故障並無濟於事。看起來無論我做什麼,六個舊的1.4版本都在使用。任何幫助你可以提供將非常感激!

編輯:完整回溯:

Traceback (most recent call last): 
    File "/Users/zachgoldfine/PycharmProjects/FirstTry/GetAroundRentalSpreadsheetRead.py",  line 71, in <module> 
    spreadsheetId=spreadsheetId, range=rangeName1).execute() 
    File "/Library/Python/2.7/site-packages/oauth2client/util.py", line 129, in positional_wrapper 
    return wrapped(*args, **kwargs) 
    File "/Library/Python/2.7/site-packages/googleapiclient/http.py", line 836, in execute 
    method=str(self.method), body=self.body, headers=self.headers) 
    File "/Library/Python/2.7/site-packages/googleapiclient/http.py", line 162, in _retry_request 
    resp, content = http.request(uri, method, *args, **kwargs) 
    File "/Library/Python/2.7/site-packages/oauth2client/transport.py", line 186, in new_request 
    credentials._refresh(orig_request_method) 
    File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 761, in _refresh 
    self._do_refresh_request(http) 
    File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 774, in _do_refresh_request 
    body = self._generate_refresh_request_body() 
    File "/Library/Python/2.7/site-packages/oauth2client/client.py", line 716, in _generate_refresh_request_body 
    body = urllib.parse.urlencode({ 
AttributeError: 'Module_six_moves_urllib_parse' object has no attribute  'urlencode' 
+0

,您可以包括完整的追蹤,所以我們可以從文件(S)的錯誤起源看? – Evert

+0

@Evert添加了完整的追溯 –

+0

我在追蹤中看到提及pycharm。你是通過pycharm運行的東西嗎?這可能是一個問題。我對pycharm並不熟悉,但是如果可以避免它並嘗試從命令行運行相關腳本,那可能有助於縮小問題原因。 – Evert

回答

0

假設它確實與六版中的問題,這裏是安裝6 能夠使用新安裝的版本的一種方法。

重要提示:此操作僅適用於您的用戶帳戶;不從任何其他帳戶。
爲了安全起見:這不會改變系統的Python環境,也就是說,可能使用Python的系統腳本將繼續使用舊的pip版本。

首先,顛倒上述三個步驟。特別是,在腳本中手動更改sys.path實際上應該很少需要

然後,使用安裝本地版本的--user選項,Python(當由該用戶運行時)將首先自動選取。 爲了確保Python可執行程序使用的是對應於PIP模塊(後下)各安裝了六個模塊,使用以下命令:

python -m pip install six --user 

其中python可能是一些輕微別的,如果你碰巧無法使用系統Python(例如,z/usr/local/bin/python , or python3 , etc).
There is no need for
sudo`或類似的。

如果pip抱怨需求已經是最新的(它不應該,或者你不會得到以上問題),請嘗試:

python -m pip install six --user --upgrade --force 

完成後,您可以檢查$HOME/Library/Python/x.y/lib/python/site-packages以查看是否在該處看到正確的六個版本。這是您的本地用戶庫目錄,而不是系統之一。 x.y大概是2.7,但是確實檢查python實際上是該版本。


這個問題可能也與谷歌API客戶端。我不知道是否有一個點的安裝,否則,您可以嘗試爲六個類似的東西:

python -m pip install <google-api-client> --user (--upgrade --force) 
+0

感謝您的回覆。我遵循你的步驟,首先擺脫bashrc加載項,然後刪除sys.path.insert位。當我嘗試你的第一個建議時,我得到了「Requirement already satisfied ...」,所以我嘗試了第二個建議 - 增加了--upgrade --force,並且似乎成功安裝了升級後的六個版本(版本1.10)。接下來,我檢查了你建議的目錄,並且我得到了'沒有這樣的文件或目錄:/ Users/zachgoldfine/Library/Python/2.7/lib/python/site-packages' –

+0

從我理解的看來, 1.6以上。但是當我運行腳本時,它似乎每次都使用六個版本的1.4版本,從而導致錯誤。如何將Python /解釋器(對不起,如果我的詞彙在此處)指向更新版本的六個而不是較舊的版本? –

+0

@ZachGoldfine兩個測試:1 /你可以看到'$ HOME/.local/lib/python2.7/site-packages'目錄是否存在? 2 /你可以運行Python本身,並在Python提示符下輸入6,然後檢查版本:>>> import six;六.__版本_應該這樣做。 – Evert