我想在我的Windows10机器上使用GitHub中的一些代码。我经常遇到的错误是:
AttributeError: module 'os' has no attribute 'fork'
我查了一下,发现Windows不支持os.fork()
调用,所以我尝试寻找在Windows机器上获取bash的方法(将来可能需要bash来编写其他脚本)。我发现了Windows Linux子系统,它听起来非常适合这个。我安装了WLS1,并从微软商店获得了Ubuntu。Bash看起来像预期的那样工作,但是这个脚本仍然在Bash中抛出相同的错误
几年前我发现了一个类似的问题。公认的答案是建议在虚拟机上运行Linux应用程序,我认为这正是我正在做的(对吗?)。有人知道我如何让这个脚本工作吗?(顺便说一句,我知道它可以工作,因为我以前在工作时的Linux机器上运行过它。)
编辑:这可能是另一个问题的症状
我认为这意味着Ubuntu WSL1使用的是python的Linux路径:
在Powershell中:Get-Command python
给我C:\Users\myname\AppData\Local\Microsoft...
在Ubuntu中:which python
给我/usr/bin/python3
在Powershell中,如果我尝试使用wellmap .\wellmap-text.toml
读取.toml文件,就会出现“not In Path”错误(在我尝试设置机器时,我已经看到了很多错误,我不知道如何正确地将内容添加到路径中,或者这样做可能会破坏某些内容)
wellmap : The term 'wellmap' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ wellmap .\wellmap-text.toml
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (wellmap:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
在Ubuntu WSL上,运行wellmap ./wellmap-text.toml
会给我一个command not found
错误
因为我知道wellmap.exe的路径,所以我尝试直接给Powershell和Ubuntu这个路径,并且是超显式的。这就是我得到module 'os' has no attribute 'fork'
错误的地方
在Powershell中:
& “C:\Users\myname\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\Scripts\wellmap.exe” \Users\myname\Desktop\wellmap-text.toml
这个错误是:
Traceback (most recent call last): File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 87, in run_code exec(code, run_globals) File "C:\Users\myname\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\Scripts\wellmap.exe_main.py", line 7, in File "C:\Users\myname\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\wellmap\plot.py", line 101, in main if os.fork() != 0: AttributeError: module 'os' has no attribute 'fork'
在Ubuntu中:
/mnt/c/Users/myname/AppData/Local/Packages/PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0/LocalCache/local-packages/Python39/Scripts/wellmap.exe /mnt/c/Users/myname/Desktop/wellmap-test.toml
还有同样的错误:
Traceback (most recent call last): File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\runpy.py", lin e 197, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.496.0_x64__qbz5n2kfra8p0\lib\runpy.py", lin e 87, in run_code exec(code, run_globals) File "C:\Users\myname\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-package s\Python39\Scripts\wellmap.exe_main.py", line 7, in File "C:\Users\myname\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-package s\Python39\site-packages\wellmap\plot.py", line 101, in main if os.fork() != 0: AttributeError: module 'os' has no attribute 'fork'
您添加到更新问题中的信息突出显示了一个可能的问题。你说在Ubuntu中,你正在运行:
/mnt/c/Users/myname/AppData/Local/Packages/PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0/LocalCache/local-packages/Python39/Scripts/wellmap.exe /mnt/c/Users/myname/Desktop/wellmap-test.toml
如果是这样,那么您仍然在Ubuntu下运行Windows版本的
wellmap.exe
。因为它运行的是exe,所以WSL将控制权传递回Windows(它比这个更重要)。无论如何,如果您正在运行.exe
,那么它将在Windows Python环境中运行,而不是在Linux Python下运行让我们尝试实际安装和运行Linux Python wellmap。我们可以在虚拟环境中这样做,以防止更改默认的Python环境。在Ubuntu中:
然后用
wellmap
文件尝试.toml
(没有扩展名)。该.toml
文件仍然可以位于Windows路径中,而不会产生影响您可能需要指定脚本、WSL上的Linux发行版(和版本)。刚刚用Python3.8.5在WSL2上的Ubuntu20.04上试用过。下面几行
干得好
由于您提到您首先尝试在Windows上的Python上运行它,因此您的Windows Python版本可能仍然优先于您的Linux Python
用
which python3
检查Python位置。您可能会发现它指向Windows版本在Ubuntu中检查你的路径。您可能会发现Windows Python版本已经存在,并且它的优先级高于Linux版本。这是因为WSL“有益地”将Windows路径前置到Linux路径,以允许您在Linux下访问Windows应用程序和实用程序。这在大多数情况下很有用,但在同时安装Windows和Linux版本的工具时可能会导致问题
假设是这样的话,我知道有很多变通方法。其中三个,您可以在my answer here中阅读关于WSL上npm的类似问题。它们都和nodejs/npm一样适用于Python
当然,您也可以在启动应用程序时指定Linux Python的完整路径
/usr/bin/python3
相关问题 更多 >
编程相关推荐