[英]Using 3to2 in Python, get “python: can't open file '3to2': [Errno 2] No such file or directory”
我已经在系统上安装了3to2-1.1.1(可在此处找到),将其安装到测试文件的目录中(用3种语法编写的简单的“ Hello,world!”程序),输入命令提示符:
python 3to2 HelloWorld.py
具有以下输出:
python: can't open file '3to2': [Errno 2] No such file or directory
我试图更改目录名称/路径,但是在查看了这篇文章之后,我确信这可能是依赖性问题?
我在创建者的仓库中提出了一个问题,并在互联网上进行了无休止的搜索,但似乎是世界上唯一遇到此问题的人。
我尝试过卸载和重新安装的方法很多。 任何帮助都值得赞赏-即使您只是告诉我这是操作员错误。
额外说明:
Windows无法照顾shebang。 Windows中的默认关联是通过文件扩展名。 但是,文件3to2
不带有.py
扩展名(只有shebang)。 因此,Windows通常无法确定如何处理该文件。
OP讨论了以下用例:
python 3to2 <arg-file>
。 在pip
安装中,这对我不起作用。 Python引发内部ENOENT(I / O)错误。 该用例将被丢弃。 3to2 <arg-file>
。 也不起作用。 这是因为Windows不知道如何执行此文件。 有趣的是,即使Windows的位置位于系统PATH
中,也无法找到该文件。 在where
调用会产生负面结果。 Windows无法以某种方式处理没有扩展名的文件名。 3to2
重命名为3to2.py
(在%PYTHON_INSTALL_DIRECTORY%\\Scripts\\
),因为它确实是python源文件。 Windows上的Python默认设置为处理.py
文件。 该文件的位置在系统PATH
。 尝试调用3to2.py <arg-file>
。 这可行! python 3to2.py <arg-file>
。 仍然不起作用。 Python引发ENOENT错误。 3to2.py
是可以的。 依赖程序可能无法正常工作。 那么,为什么通过Python调用3to2.py
失败了? 答案很简单。 Python只调用您提供的内容。 当您指定相对路径时,它只会在程序的当前工作目录中查找,而不会在其他目录中查找。 当您给出绝对路径时,Python会做必要的事情。
笔记:
pip
安装了软件包。 我没有通过其他任何方法进行测试。 我尝试在Linux上通过pip
安装它,它可以直接使用。
但是,您可以像2to3
一样使用它。 因此,在cmd
键入3to2 -w HelloWorld.py
可能有效。 如果cmd
找不到3to2
的路径,则需要手动找到它。
kevin@Arch ~> cat 1.py
print('Hello')
var = input('text')
kevin@Arch ~> 3to2 1.py
RefactoringTool: Skipping optional fixer: collections
RefactoringTool: Skipping optional fixer: int
RefactoringTool: Skipping optional fixer: memoryview
RefactoringTool: Skipping optional fixer: printfunction
RefactoringTool: Skipping optional fixer: unittest
RefactoringTool: Refactored 1.py
b'--- 1.py\t(original)'
b'+++ 1.py\t(refactored)'
b'@@ -1,2 +1,2 @@'
b"-print('Hello')"
b"-var = input('text')"
b"+print u'Hello'"
b"+var = raw_input(u'text')"
RefactoringTool: Files that need to be modified:
RefactoringTool: 1.py
kevin@Arch ~> 3to2 -w 1.py
RefactoringTool: Skipping optional fixer: collections
RefactoringTool: Skipping optional fixer: int
RefactoringTool: Skipping optional fixer: memoryview
RefactoringTool: Skipping optional fixer: printfunction
RefactoringTool: Skipping optional fixer: unittest
RefactoringTool: Refactored 1.py
b'--- 1.py\t(original)'
b'+++ 1.py\t(refactored)'
b'@@ -1,2 +1,2 @@'
b"-print('Hello')"
b"-var = input('text')"
b"+print u'Hello'"
b"+var = raw_input(u'text')"
RefactoringTool: Files that were modified:
RefactoringTool: 1.py
kevin@Arch ~> cat 1.py
print u'Hello'
var = raw_input(u'text')
kevin@Arch ~>
在另一个系统上安装后,我无法复制该问题。 这使我相信事情本身就是错的。 如果我能解决的话,我将在这里更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.