繁体   English   中英

在Python中使用3to2,得到“ python:无法打开文件'3to2':[Errno 2]没有这样的文件或目录”

[英]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

我试图更改目录名称/路径,但是在查看了这篇文章之后,我确信这可能是依赖性问题?

我在创建者的仓库中提出了一个问题,并在互联网上进行了无休止的搜索,但似乎是世界上唯一遇到此问题的人。

我尝试过卸载和重新安装的方法很多。 任何帮助都值得赞赏-即使您只是告诉我这是操作员错误。

额外说明:

  • 我正在运行python 2.7(但也尝试使用3安装和运行它)
  • 我正在使用Windows cmd

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安装了软件包 我没有通过其他任何方法进行测试。
  • 我在Windows 7 SP1系统上对此进行了测试。 较新的版本可能具有更好的文件系统支持。

我尝试在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM