我正在Windows 10的虚拟机上使用Linux。
我从IPython下载了一本工具笔记本
现在,当我试图运行代码的某些部分时,会出现以下错误:
/usr/lib/python3.8/distutils/version.py in _cmp(self, other)
335 if self.version == other.version:
336 return 0
--> 337 if self.version < other.version:
338 return -1
339 if self.version > other.version:
TypeError: '<' not supported between instances of 'str' and 'int'由于我不知道,为了解决这个问题,我决定只编辑这个version.py文件(也许不太聪明,但我不知道还能做什么……)
我只是决定评论错误的线路,并返回0,每次。
现在,奇怪的是,我仍然在评论中看到同样的错误:
/usr/lib/python3.8/distutils/version.py in _cmp(self, other)
335 # if self.version == other.version:
336 # return 0
--> 337 # if self.version < other.version:
338 # return -1
339 # if self.version > other.version:
TypeError: '<' not supported between instances of 'str' and 'int'现在,我测试了如果我只添加了一些空的新行会发生什么,错误看起来如下(指向同一行,其中没有任何内容):
/usr/lib/python3.8/distutils/version.py in _cmp(self, other)
335
336
--> 337
338
339
TypeError: '<' not supported between instances of 'str' and 'int'我只是无法解释这里发生了什么,我希望有人有一个想法。
完整的回溯是:
TypeError Traceback (most recent call last)
/tmp/ipykernel_2888/2193680867.py in <module>
1 fastqdir = os.path.join(resultsdir, './FASTQ_files/')
2 print("Downloading FASTQ files from the SRA...")
----> 3 dms_tools2.sra.fastqFromSRA(
4 samples=samples,
5 fastq_dump='/home/andreas/sratoolkit.2.11.0-ubuntu64/bin/fastq-dump',
~/.local/lib/python3.8/site-packages/dms_tools2/sra.py in fastqFromSRA(samples, fastq_dump, fastqdir, aspera, overwrite, passonly, no_downloads, ncpus)
91 .decode('utf-8').split(':')[-1].strip())
92 fastq_dump_minversion = '2.8'
---> 93 if not (distutils.version.LooseVersion(fastq_dump_version) >=
94 distutils.version.LooseVersion(fastq_dump_minversion)):
95 raise RuntimeError("fastq-dump version {0} is installed. You need "
/usr/lib/python3.8/distutils/version.py in __ge__(self, other)
68
69 def __ge__(self, other):
---> 70 c = self._cmp(other)
71 if c is NotImplemented:
72 return c
/usr/lib/python3.8/distutils/version.py in _cmp(self, other)
335 if self.version == other.version:
336 return 0
--> 337 if self.version < other.version:
338 return -1
339 if self.version > other.version:
TypeError: '<' not supported between instances of 'str' and 'int'发布于 2022-01-25 12:27:41
问题是你的fastq转储版本。查看从sra.py生成错误的源代码
fastq_dump_version = (subprocess.check_output([fastq_dump, '--version'])
.decode('utf-8')
.replace('"fastq-dump" version', '').split(':'))
if len(fastq_dump_version) == 1:
fastq_dump_version = fastq_dump_version[0].strip()
elif len(fastq_dump_version) == 2:
fastq_dump_version = fastq_dump_version[1].strip()
else:
fastq_dump_version = (subprocess.check_output([fastq_dump, '--help'])
.decode('utf-8').split(':')[-1].strip())
fastq_dump_minversion = '2.8'
if not (distutils.version.LooseVersion(fastq_dump_version) >=
distutils.version.LooseVersion(fastq_dump_minversion)):
raise RuntimeError("fastq-dump version {0} is installed. You need "
"at least version {1}".format(fastq_dump_version,
fastq_dump_minversion))有一个关于fastq-dump --version输出的假设,即在输出版本之前有一个:。但是,2.11的情况并非如此,子进程调用的结果如下:
>>> (subprocess.check_output(['sratoolkit.2.11.0-ubuntu64/bin/fastq-dump', '--version']).decode('utf-8').replace('"fastq-dump" version', '').split(':'))
['\n"sratoolkit.2.11.0-ubuntu64/bin/fastq-dump" version 2.11.0\n\n']然后,该字符串用于进一步的版本比较,distutils抱怨无法将其与保存在fastq_dump_minversion中的版本2.8进行比较。
解决这个问题的最简单方法是使用sra工具包的另一个版本。版本2.9应该可以工作,因为版本输出似乎与预期相符:
>>> (subprocess.check_output(['sratoolkit.2.9.0-ubuntu64/bin/fastq-dump', '--version']).decode('utf-8').replace('"fastq-dump" version', '').split(':'))
['\nsratoolkit.2.9.0-ubuntu64/bin/fastq-dump ', ' 2.9.0\n\n']附加信息
为什么改变lib/python3.7/distutils/version.py不起作用呢?lib/python3.7/distutils/__pycache__中有一个预编译的文件正在被读取,或者是实际的lib/python3.7/distutils/version.py。如果编辑version.py,则应删除__pycache__ dir中的协同响应文件。不过,请注意,我强烈建议不要处理这些文件,,因为如果您不知道自己在做什么,您可以很容易地破坏您的python。
P.S.
这应该在dms_tools版本2.6.11中得到修正
发布于 2022-01-25 11:56:37
首先,错误TypeError: '<' not supported between instances of 'str' and 'int'意味着在条件检查中使用的操作数之一是字符串数据类型,另一个操作数是整数数据类型。
通过使用type()函数,您可以检查什么是什么。
接下来,您可以使用mv命令重命名文件,然后使用以下方法再次运行:
python <filename.py>发布于 2022-01-25 11:58:57
简而言之:您正在尝试比较两种不同的数据类型。如果您确信这两个值都是数字,则可以在比较之前转换该值:
if int(self.version) < int(other.version):https://stackoverflow.com/questions/70848105
复制相似问题