在 macOS 上使用 dbm.gnu for Python 3.6.8
Using dbm.gnu for Python 3.6.8 on macOS
我在 macOS 上使用 dbm.gnu for Python 3.6.8 时遇到一些问题。我已经在我的 Python 虚拟环境中安装了 gdbm 和 conda...但是我在尝试调用 dbm.gnu:
时收到以下错误消息
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-11fcf8fc693c> in <module>
1 # Downloads the HI data in a fits file format
2 hi_datafile = download_file('http://cdsarc.u-strasbg.fr/vizier/ftp/cats/J/A+A/594/A116/CUBES/GAL/TAN/TAN_C14.fits',
----> 3 cache = True, show_progress = True)
/anaconda3/envs/py36-stable/lib/python3.6/site-packages/astropy/utils/data.py in download_file(remote_url, cache, show_progress, timeout)
1010 if cache:
1011 # We don't need to acquire the lock here, since we are only reading
-> 1012 with shelve.open(urlmapfn) as url2hash:
1013 if url_key in url2hash:
1014 return url2hash[url_key]
/anaconda3/envs/py36-stable/lib/python3.6/shelve.py in open(filename, flag, protocol, writeback)
241 """
242
--> 243 return DbfilenameShelf(filename, flag, protocol, writeback)
/anaconda3/envs/py36-stable/lib/python3.6/shelve.py in __init__(self, filename, flag, protocol, writeback)
225 def __init__(self, filename, flag='c', protocol=None, writeback=False):
226 import dbm
--> 227 Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
228
229
/anaconda3/envs/py36-stable/lib/python3.6/dbm/__init__.py in open(file, flag, mode)
89 elif result not in _modules:
90 raise error[0]("db type is {0}, but the module is not "
---> 91 "available".format(result))
92 else:
93 mod = _modules[result]
error: db type is dbm.gnu, but the module is not available
有什么可靠的方法可以让它工作吗?当从 astropy 调用 download_file
时,我可以通过设置 cache = False
来关闭缓存...但我真的很想设置 cache = True
。任何帮助将非常感激。
所以我最终做了一些不明智但有效的事情,那就是将“/anaconda3/envs/py36-stable/lib/python3.6/dbm/gnu.py”中的唯一一行从
更改为
from _gdbm import *
到
from _dbm import *
...这对我有用。
我在 macOS 上使用 dbm.gnu for Python 3.6.8 时遇到一些问题。我已经在我的 Python 虚拟环境中安装了 gdbm 和 conda...但是我在尝试调用 dbm.gnu:
时收到以下错误消息---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-11fcf8fc693c> in <module>
1 # Downloads the HI data in a fits file format
2 hi_datafile = download_file('http://cdsarc.u-strasbg.fr/vizier/ftp/cats/J/A+A/594/A116/CUBES/GAL/TAN/TAN_C14.fits',
----> 3 cache = True, show_progress = True)
/anaconda3/envs/py36-stable/lib/python3.6/site-packages/astropy/utils/data.py in download_file(remote_url, cache, show_progress, timeout)
1010 if cache:
1011 # We don't need to acquire the lock here, since we are only reading
-> 1012 with shelve.open(urlmapfn) as url2hash:
1013 if url_key in url2hash:
1014 return url2hash[url_key]
/anaconda3/envs/py36-stable/lib/python3.6/shelve.py in open(filename, flag, protocol, writeback)
241 """
242
--> 243 return DbfilenameShelf(filename, flag, protocol, writeback)
/anaconda3/envs/py36-stable/lib/python3.6/shelve.py in __init__(self, filename, flag, protocol, writeback)
225 def __init__(self, filename, flag='c', protocol=None, writeback=False):
226 import dbm
--> 227 Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
228
229
/anaconda3/envs/py36-stable/lib/python3.6/dbm/__init__.py in open(file, flag, mode)
89 elif result not in _modules:
90 raise error[0]("db type is {0}, but the module is not "
---> 91 "available".format(result))
92 else:
93 mod = _modules[result]
error: db type is dbm.gnu, but the module is not available
有什么可靠的方法可以让它工作吗?当从 astropy 调用 download_file
时,我可以通过设置 cache = False
来关闭缓存...但我真的很想设置 cache = True
。任何帮助将非常感激。
所以我最终做了一些不明智但有效的事情,那就是将“/anaconda3/envs/py36-stable/lib/python3.6/dbm/gnu.py”中的唯一一行从
更改为from _gdbm import *
到
from _dbm import *
...这对我有用。