2017-06-13 102 views
1

大家晚上好,Python脚本可以在一个文件夹中工作,但不能在子文件夹中工作。

我试图做一些机器与Python学习,所以我输入模块scikit学习:

from sklearn.preprocessing import MinMaxScaler 

,这让我这个奇怪的错误:

Traceback (most recent call last): 

    File "<ipython-input-22-b55a4eaccb0b>", line 1, in <module> 
    from sklearn.preprocessing import MinMaxScaler 

    File "C:\Users\Francesco\Anaconda3\lib\site-packages\sklearn\preprocessing\__init__.py", line 6, in <module> 
    from ._function_transformer import FunctionTransformer 

    File "C:\Users\Francesco\Anaconda3\lib\site-packages\sklearn\preprocessing\_function_transformer.py", line 2, in <module> 
    from ..utils import check_array 

    File "C:\Users\Francesco\Anaconda3\lib\site-packages\sklearn\utils\__init__.py", line 18, in <module> 
    from ..externals.joblib import cpu_count 

    File "C:\Users\Francesco\Anaconda3\lib\site-packages\sklearn\externals\joblib\__init__.py", line 128, in <module> 
    from .parallel import Parallel 

    File "C:\Users\Francesco\Anaconda3\lib\site-packages\sklearn\externals\joblib\parallel.py", line 24, in <module> 
    from ._multiprocessing_helpers import mp 

    File "C:\Users\Francesco\Anaconda3\lib\site-packages\sklearn\externals\joblib\_multiprocessing_helpers.py", line 24, in <module> 
    _sem = mp.Semaphore() 

AttributeError: module 'multiprocessing' has no attribute 'Semaphore' 

这些错误是从Anaconda(Spider)复制而来的,但它们即使从命令行启动python会话也是存在的。在这里我要运行脚本的文件夹是:

C:\Users\Francesco\Desktop\script_python 

很奇怪的事情是,如果我从桌面运行相同的脚本,只是一个文件夹时,它的工作原理!

C:\Users\Francesco\Desktop\ <-- Here it works!! 

我发现这个问题是相对于多模块,这里的这种奇怪的行为快照:你在哪里运行

Summary of the problem

+0

桌面上是否有任何名为'multiprocessing'的目录(隐藏'multiprocessing'模块)。你可以尝试'python -c“import multiprocessing; print(multiprocessing .__ dir __)”' –

+0

噢,上帝,我在该文件夹中有一个名为multiprocessing的模块,我完全忘了!太棒了,把它作为答案我会接受它! – FrAxl93

回答

1

你可能有一个模块multiprocessing目录脚本来自。

通常,在Python中,您运行脚本的路径优先于Python env,因此它会尝试首先选择该路径。这意味着当sklearn进口multiprocessing时,它使用你的模块,而不是内置的multiprocessing

当这种类型的错误的出现,以识别错误的一种方式是运行

python -c "import multiprocessing; print(multiprocessing.__dir__)" 

到正在使用哪个模块双重检查。

相关问题