Conda:下载包并更新它

时间:2017-06-05 20:38:04

标签: python package conda

使用Python 2.7,我试图从Anaconda.org下载一个软件包,将其版本号增加0.1(即ver 0.0到ver 0.1),然后将其重新上传到同一个Anaconda频道。我的代码保存在Window的cmd或iPython

中使用的.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时,我遇到了完全相同的问题。

1 个答案:

答案 0 :(得分:0)

这是因为感叹号private void OnMsgRecieved(PortMsg obj) { ShowDialog(obj.StringID); } private async void ShowDialog(string msg) { var dlg = new MessageDialog(msg); try { await Dispatcher.RunAsync(CoreDispatcherPriority.High, async () => { await dlg.ShowAsync(); }); } catch (Exception exc) { // Catastrophic Failure } } 语法在IPython(和Jupyter Notebooks)中作为运行shell命令的方法有效。但是,对于在CMD中键入! code here时运行的常规(常规)Python解释器,它不是有效的语法。虽然没有详细记录,但有python script_name.pyconda.cli.python_api。您可以在此处找到前者的代码:https://github.com/conda/conda/blob/master/conda/cli/python_api.py