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