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

时间:2015-12-15 09:11:58

标签: python python-2.7

我在我的系统上安装了3to2-1.1.1(找到了here), cd到我的测试文件的目录(一个简单的“Hello,world!”程序,用3种语法编写)输入我的命令提示符:

python 3to2 HelloWorld.py

使用以下输出:

python: can't open file '3to2': [Errno 2] No such file or directory

我试图更改目录名称/路径,但在查看this帖后,我确信它可能是依赖问题?

我在创作者的回购上提出了一个问题,并在互联网上无休止地搜索,但似乎是世界上遇到这个问题的唯一人。

我尝试过卸载和重新安装......这么多方法。任何和所有帮助表示赞赏 - 即使您只是告诉我操作员错误。

额外说明:

  • 我正在运行Python 2.7(但也尝试使用3安装并运行它)
  • 我使用的是Windows cmd

3 个答案:

答案 0 :(得分:1)

Windows无法照顾shebangs。 Windows中的默认关联是通过文件扩展名。但是,文件3to2没有.py扩展名(只有一个shebang)。因此,Windows通常无法确定如何处理该文件。

OP讨论了以下用例:

  • python 3to2 <arg-file>。这在pip安装中对我不起作用。 Python抛出内部ENOENT(I / O)错误。这个用例被丢弃了。
  • 3to2 <arg-file>。也不起作用。这是因为Windows不知道如何执行此文件。有趣的是,即使Windows位于系统PATH中,Windows也无法找到该文件。致电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系统上测试了这个。较新的版本可能有更好的文件系统支持。

答案 1 :(得分:0)

我尝试在我的Linux上通过pip安装它,它开箱即用。

但是,您可以像2to3一样使用它。因此,在3to2 -w HelloWorld.py中输入cmd可能有效。如果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 ~> 

答案 2 :(得分:0)

在另一个系统上安装后,我无法复制该问题。这让我相信我身边的事情是错的。如果我弄清楚的话,我会在这里更新。