2017-06-05 53 views
0

使用Python 2.7,我試圖從Anaconda.org下載一個包,將它的版本號增加0.1(即從版本0.0到版本0.1),然後重新上傳到相同的蟒蛇通道。我的代碼保存在了在窗口的CMD或IPython的Conda:下載包並更新它

使用.py文件所以我.py文件到目前爲止,我有:

import sys, subprocess, conda 

# Search for the package 
search = subprocess.check_output(['conda', 'search', 'gladio']) 

# Take version number from package 
v = [int(s) for s in search.split() if s.isdigit()] 

# Update with new version number 
v = v[0] + 1 
print 'New version number is 0.%s' % v 

# Set new commands as strings 
pack = '''!conda package -p C:\Users\Ian\Anaconda\gladio --pkg-name gladio - 
     -pkg-ver 0.%s''' % v 
load = '!anaconda upload gladio0.%s-0.tar.bz2' % v 

# Execute strings 
exec pack 
exec load 

但是我得到這個在終端的響應:

New version number is 0.1 
    File "<string>", line 1 
    !conda package -p C:\Users\Ian\Anaconda\gladio --pkg-name gladi... 
    ^
SyntaxError: invalid syntax 

但是,如果我將原始文本複製並粘貼到iPython中,它就可以工作。

如果刪除了感嘆號,我得到:

conda package -p C:\Users\Ian\Anaconda\gladio --pkg-name gladi... 
      ^
SyntaxError: invalid syntax 

我也試圖改變以

eval pack 
eval load 

eval $pack 
eval $load 

沒有運氣。我也嘗試過定義一個'pack'和'load',但是我得到相同的語法錯誤。我知道我應該避免exec和eval函數,但我不知道在這裏做什麼。使用Window的cmd,Spyder或iPython時,我有完全相同的問題。

回答

0

這是因爲感嘆號! code here語法在IPython(和Jupyter筆記本)中作爲運行shell命令的手段有效。但是,對於在CMD中鍵入python script_name.py時運行的常規(常規)Python解釋器而言,這是無效的語法。雖然沒有很好的記錄,但有一個conda.cli.python_apiconda.exports。你可以在這裏找到前者的代碼:https://github.com/conda/conda/blob/master/conda/cli/python_api.py