簡體   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