Python脚本在一个文件夹中工作,但不在子文件夹上工作。

时间:2017-06-13 17:13:07

标签: python multiprocessing directory

大家晚上好,

我正在尝试用python进行一些机器学习,所以我导入了模块scikit-learn:

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

1 个答案:

答案 0 :(得分:1)

您可能在运行脚本的目录中有一个模块multiprocessing

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

出现此类错误时,识别错误的一种方法是运行

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

仔细检查正在使用的模块。