【问题标题】:Using 3to2 in Python, get "python: can't open file '3to2': [Errno 2] No such file or directory"在 Python 中使用 3to2,得到“python: can't open file '3to2': [Errno 2] No such file or directory”
【发布时间】:2015-12-15 09:11:57
【问题描述】:

我在我的系统上安装了 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 帖子后,我确信这可能是依赖问题?

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

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

补充说明:

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

【问题讨论】:

  • 你试过将3to2的完整路径传递给Python吗?像这样:python \path\to\3to2 HelloWorld.py
  • @KevinGuan 和 Quirk,我什至尝试将我的文件移动到 3to2 文件夹中,即 - C:\Users\username\3to2-1.1.1>python 3to2 -w HelloWorld.py 无济于事......也以各种方式安装(构建、安装安装、pip 等) )。编辑 - 降价格式
  • 好的,这听起来可能很傻,但是文件3to2 是否存在?此外,您可以尝试将3to2 重命名为3to2.py,然后运行。你基本上得到一个 ENOENT 错误(I/O 错误)。这意味着 PYTHONPATH、PATH 或文件存在问题。

标签: python python-2.7


【解决方案1】:

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

OP 讨论了以下用例:

  • python 3to2 <arg-file>。这在pip 安装中对我不起作用。 Python 引发内部 ENOENT (I/O) 错误。这个用例被丢弃了。
  • 3to2 <arg-file>。也不行。这是因为 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 系统上对此进行了测试。较新的版本可能有更好的文件系统支持。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不幸的是,情况似乎如此。似乎没有人能够复制我的问题,这让我觉得自己像个疯子!
    • @RobotLauren:你在运行C:\Users\username\3to2-1.1.1>python 3to2 -w HelloWorld.py时遇到了什么错误?
    【解决方案3】:

    在另一个系统上安装后,我无法复制该问题。这让我相信我的事情有问题。如果我弄明白了,我会在这里更新。

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 1970-01-01
      • 2015-10-20
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      相关资源
      最近更新 更多