标签: python-2to3

如何修复我的包中的“.dist-info directory not found”?

我有一个 Python 2 包,我正在尝试升级到 Python 3。它是由曾经在我现在所在的同一团队工作但不再在公司工作的人编写的,不幸的是没有人离开团队能够提供帮助。

在包的文件上运行 2to3 后,我跑去python setup.py sdist创建一个包,将包放在本地存储库中,然后尝试使用pip install来安装包。它最终出现以下错误:

Exception:
Traceback (most recent call last):
  File "/home/user/project/lib/python3.5/site-packages/pip/basecommand.py", line 223, in main
    status = self.run(options, args)
  File "/home/user/project/lib/python3.5/site-packages/pip/commands/install.py", line 297, in run
    root=options.root_path,
  File "/home/user/project/lib/python3.5/site-packages/pip/req/req_set.py", line 622, in install
    **kwargs
  File "/home/user/project/lib/python3.5/site-packages/pip/req/req_install.py", line 808, in install
    self.move_wheel_files(self.source_dir, root=root)
  File "/home/user/project/lib/python3.5/site-packages/pip/req/req_install.py", line 1003, in move_wheel_files
    isolated=self.isolated,
  File "/home/user/project/lib/python3.5/site-packages/pip/wheel.py", line 340, in move_wheel_files
    assert info_dir, "%s .dist-info directory not found" % req
AssertionError: my-package-name .dist-info directory …
Run Code Online (Sandbox Code Playgroud)

python pip python-2to3

6
推荐指数
1
解决办法
9115
查看次数

RefactoringTool:ParseError:错误输入:类型= 22,值='='

我正在重构一些 python2 代码并使用 2to3 模块将其更改为 python3。我收到以下解析错误:

RefactoringTool: There was 1 error:
RefactoringTool: Can't parse ./helpers/repo.py: ParseError: bad input: type=22, value='=', context=(' ', (45, 25))
Run Code Online (Sandbox Code Playgroud)

这是产生错误的代码:

    except ImportError as error_msg:  # pragma: no cover                           
        print(' ',  file = sys.stderr) # this is a line that yields error                                          
        print("Could not locate modifyrepo.py", file=sys.stderr)                
        print("That is odd... should be with createrepo", file=sys.stderr)      
        raise ImportError(error_msg)
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题。你能帮忙吗?

python python-2to3

6
推荐指数
1
解决办法
8008
查看次数

模式以匹配对lib2to3的1-或2-arg函数调用

我有一个脚本,可以重新编写Python模块,以便将所有出现的func(a)都转换为func2(a is None)。我现在想支持也func(a, msg)成为func2(a is None, msg),但是我找不到能做到这一点的模式。以下显示了我的尝试:

from lib2to3 import refactor, fixer_base
from textwrap import dedent

PATTERN_ONE_ARG = """power< 'func' trailer< '(' arglist< obj1=any > ')' > >"""

PATTERN_ONE_OR_TWO_ARGS = """power< 'func' trailer< '(' arglist< obj1=any [',' obj2=any] > ')' > >"""


class TestFixer(fixer_base.BaseFix):
    def __init__(self, options, fixer_log):
        # self.PATTERN = PATTERN_ONE_ARG
        self.PATTERN = PATTERN_ONE_OR_TWO_ARGS

        super().__init__(options, fixer_log)

    def transform(self, node, results):
        print("found it")
        return node


class TestRefactoringTool(refactor.MultiprocessRefactoringTool):
    def get_fixers(self):
        fixer = TestFixer(self.options, …
Run Code Online (Sandbox Code Playgroud)

python pattern-matching python-2to3

5
推荐指数
1
解决办法
171
查看次数

python 2到3迁移错误“readinto”方法

我转换了一个我在 python 2.7.3 上写的大文件,然后现在我想升级到 python 3+(我有 3.5)。

  1. 到目前为止我做了什么:
    1. 安装了 python 解释器 3.5+
    2. 更新了环境路径以从 python3+ 文件夹中读取
    3. 升级了 numpy,pandas,
    4. 我曾经>python 2to3.py -w viterbi.py转换为版本 3+

我有错误的部分

import sys
import numpy as np
import pandas as pd

# Counting number of lines in the text file
lines = 0
buffer = bytearray(2048)
with open(inputFilePatheName) as f:
    while f.readinto(buffer) > 0:
        lines += buffer.count('\n')
Run Code Online (Sandbox Code Playgroud)

我的错误是:

AttributeError: '_io.TextIOWrapper' object has no attribute 'readinto'
Run Code Online (Sandbox Code Playgroud)

这是第一个错误,我无法继续查看是否还有其他错误。我不知道什么是等效命令readinto

python python-2to3

5
推荐指数
1
解决办法
370
查看次数

2to3-如何保持输入文件中的换行符?

我试图2to3在Windows计算机上运行,其中* .py文件具有Unix样式的结束符。运行2to3修改输出文件中的换行符。

MCVE:

之前的print2.py内容

print "Hello, world!"\n
Run Code Online (Sandbox Code Playgroud)

执行的命令:

2to3 print2.py -w -n
Run Code Online (Sandbox Code Playgroud)

之后的print2.py内容

print("Hello, world!")\r\n
Run Code Online (Sandbox Code Playgroud)

预期内容:

print("Hello, world!")\n
Run Code Online (Sandbox Code Playgroud)

2to3进行转换时是否可以保留旧换行符?

python python-2.x python-2to3 python-3.x

5
推荐指数
1
解决办法
474
查看次数

BeautifulSoup4 无法在 Windows7 上的 python3.5 中安装

我已经从https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/下载了 beautifulsoup4-4.5.3.tar.gz并将其解压缩到我的 python 工作目录(这不是我的 python 安装目录) .

然而,当我跑

from bs4 import BeautifulSoup
Run Code Online (Sandbox Code Playgroud)

在我的 IDLE 中,错误消息弹出:

>>> from bs4 import BeautifulSoup
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
from bs4 import BeautifulSoup
File "D:\python\beautifulsoup4-4.5.3\beautifulsoup4-4.5.3\bs4\__init__.py", 
line 53
'You are trying to run the Python 2 version of Beautiful Soup under Python 
3. This will not work.'<>'You need to convert the code, either by installing 
it (`python setup.py install`) or by running 2to3 (`2to3 -w …
Run Code Online (Sandbox Code Playgroud)

windows installation beautifulsoup python-2to3 python-3.x

5
推荐指数
1
解决办法
1万
查看次数

将 python2 'file' 类的子类移植到 python3

我有一个调用的遗留代码class TiffFile(file)。python3的调用方式是什么?

我尝试在 python2 中替换以下内容:

class TiffFile(file):
    def __init__(self, path):
        file.__init__(self, path, 'r+b')
Run Code Online (Sandbox Code Playgroud)

在python3中是这样的:

class TiffFile(RawIOBase):
    def __init__(self, path):
        super(TiffFile, self).__init__(path, 'r+b')
Run Code Online (Sandbox Code Playgroud)

但现在我得到了TypeError: object.__init__() takes no parameters

porting python-2to3 python-2.7 python-3.x

5
推荐指数
1
解决办法
2560
查看次数

我们应该使用 pandas.compat.StringIO 还是 Python 2/3 StringIO?

StringIO 是我们在从文本中读取Pandas数据帧时使用的类似文件的字符串缓冲区对象,例如“如何从字符串创建 Pandas数据帧?”

我们应该将这两个导入中的哪一个用于 StringIO(在熊猫中)?这是一个长期存在的问题,四年来从未得到解决。

  1. StringIO.StringIO(Python 2)/ io.StringIO(Python 3)
    • 优点:对于面向未来的代码更稳定,但迫使我们进行版本分叉,例如参见 EmilH 底部的代码。
  2. pandas.compat.StringIO

用于从标准(来自 EmilH)导入的版本 2/3 分叉代码:

import sys
if sys.version_info[0] < 3: 
    from StringIO import StringIO
else:
    from io import StringIO …
Run Code Online (Sandbox Code Playgroud)

import backwards-compatibility stringio python-2to3 pandas

5
推荐指数
2
解决办法
2222
查看次数

AttributeError:'bytes' 对象没有属性 'encode'

尝试将代码从 python2 导入到 python 3 并发生此问题

    <ipython-input-53-e9f33b00348a> in aesEncrypt(text, secKey)
     43 def aesEncrypt(text, secKey):
     44     pad = 16 - len(text) % 16
---> 45     text = text.encode("utf-8") + (pad * chr(pad)).encode("utf-8")
     46     encryptor = AES.new(secKey, 2, '0102030405060708')
     47     ciphertext = encryptor.encrypt(text)
Run Code Online (Sandbox Code Playgroud)

AttributeError:'bytes' 对象没有属性 'encode'

如果我删除.encode("utf-8")错误是“无法将 str 连接到字节”。显然pad*chr(pad)似乎是一个字节串。它不能使用encode()

    <ipython-input-65-9e84e1f3dd26> in aesEncrypt(text, secKey)
     43 def aesEncrypt(text, secKey):
     44     pad = 16 - len(text) % 16
---> 45     text = text.encode("utf-8") + (pad * chr(pad))
     46     encryptor = …
Run Code Online (Sandbox Code Playgroud)

python python-2to3

5
推荐指数
1
解决办法
3万
查看次数

在将字符串与字节进行比较时,你能让 Python3 出错吗?

将代码从 Python 2 转换为 Python 3 时,一个问题是测试字符串和字节是否相等时的行为发生了变化。例如:

foo = b'foo'
if foo == 'foo':
    print("They match!")
Run Code Online (Sandbox Code Playgroud)

在 Python 3 上不打印任何内容,并且“它们匹配!” 在 Python 2 上。在这种情况下很容易发现,但在许多情况下,检查是对可能已在其他地方定义的变量执行的,因此没有明显的类型信息。

我想让 Python 3 解释器在字符串和字节之间进行相等测试时给出错误,而不是默默地得出它们不同的结论。有什么办法可以做到这一点吗?

python python-2to3 python-3.x

5
推荐指数
2
解决办法
160
查看次数