You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I can not reproduce the issue locally. Does the full output of the pip install openml command provide more information (and if so, could you provide the full output)?
Thanks @azrdev. Of course I did not doubt you were speaking the truth, the reason I asked for the output is that we can see if there is other identifying information which allows us to spot if setup.py has been called from pip or not. Sorry if you had the wrong impression.
In this case, we see setup.py gets called with quite a few additional arguments if it is called from pip, in particular a --record option to a temporary file with 'pip' in its name. @mfeurer what about specifically checking for this condition to detect usage of pip?
Hey, could it be that a missing wheel is the reason why python setup.py install installs packages by compiling the source? I just created an empty conda environment and install openml with python setup.py install and it took ~1 minute and didn't compile anything.
The log:
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.5.11
latest version: 4.7.5
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate testopenmlissue
#
# To deactivate an active environment, use
#
# $ conda deactivate
(testopenmlissue) feurerm@mllap04:~/sync_dir/projects/automl_competition_2015/auto-sklearn$ source activate testopenmlissue
(testopenmlissue) feurerm@mllap04:~/sync_dir/projects/automl_competition_2015/auto-sklearn$ conda install python
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.5.11
latest version: 4.7.5
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue
added / updated specs:
- python
The following NEW packages will be INSTALLED:
_libgcc_mutex: 0.1-main
ca-certificates: 2019.5.15-0
certifi: 2019.6.16-py37_0
libedit: 3.1.20181209-hc058e9b_0
libffi: 3.2.1-hd88cf55_4
libgcc-ng: 9.1.0-hdf63c60_0
libstdcxx-ng: 9.1.0-hdf63c60_0
ncurses: 6.1-he6710b0_1
openssl: 1.1.1c-h7b6447c_1
pip: 19.1.1-py37_0
python: 3.7.3-h0371630_0
readline: 7.0-h7b6447c_5
setuptools: 41.0.1-py37_0
sqlite: 3.28.0-h7b6447c_0
tk: 8.6.8-hbc83047_0
wheel: 0.33.4-py37_0
xz: 5.2.4-h14c3975_4
zlib: 1.2.11-h7b6447c_3
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(testopenmlissue) feurerm@mllap04:~/sync_dir/projects/automl_competition_2015/auto-sklearn$ cd ~/sync_dir/projects/openml/python/
(testopenmlissue) feurerm@mllap04:~/sync_dir/projects/openml/python$ python setup.py install
Please install this package with pip: `pip install -e .` Installation requires pip>=10.0.
(testopenmlissue) feurerm@mllap04:~/sync_dir/projects/openml/python$
(testopenmlissue) feurerm@mllap04:~/sync_dir/projects/openml/python$
(testopenmlissue) feurerm@mllap04:~/sync_dir/projects/openml/python$ python setup.py install
Please install this package with pip: `pip install -e .` Installation requires pip>=10.0.
running install
running bdist_egg
running egg_info
writing openml.egg-info/PKG-INFO
writing dependency_links to openml.egg-info/dependency_links.txt
writing requirements to openml.egg-info/requires.txt
writing top-level names to openml.egg-info/top_level.txt
reading manifest file 'openml.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching 'requirements.txt'
writing manifest file 'openml.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
creating build
creating build/lib
creating build/lib/tests
copying tests/__init__.py -> build/lib/tests
creating build/lib/openml
copying openml/__init__.py -> build/lib/openml
copying openml/config.py -> build/lib/openml
copying openml/_api_calls.py -> build/lib/openml
copying openml/__version__.py -> build/lib/openml
copying openml/utils.py -> build/lib/openml
copying openml/exceptions.py -> build/lib/openml
copying openml/testing.py -> build/lib/openml
creating build/lib/tests/test_examples
copying tests/test_examples/__init__.py -> build/lib/tests/test_examples
copying tests/test_examples/test_OpenMLDemo.py -> build/lib/tests/test_examples
creating build/lib/tests/test_flows
copying tests/test_flows/__init__.py -> build/lib/tests/test_flows
copying tests/test_flows/test_flow.py -> build/lib/tests/test_flows
copying tests/test_flows/test_flow_functions.py -> build/lib/tests/test_flows
creating build/lib/tests/test_runs
copying tests/test_runs/__init__.py -> build/lib/tests/test_runs
copying tests/test_runs/test_run.py -> build/lib/tests/test_runs
copying tests/test_runs/test_trace.py -> build/lib/tests/test_runs
copying tests/test_runs/test_run_functions.py -> build/lib/tests/test_runs
creating build/lib/tests/test_utils
copying tests/test_utils/__init__.py -> build/lib/tests/test_utils
copying tests/test_utils/test_utils.py -> build/lib/tests/test_utils
creating build/lib/tests/test_extensions
copying tests/test_extensions/__init__.py -> build/lib/tests/test_extensions
copying tests/test_extensions/test_functions.py -> build/lib/tests/test_extensions
creating build/lib/tests/test_setups
copying tests/test_setups/__init__.py -> build/lib/tests/test_setups
copying tests/test_setups/test_setup_functions.py -> build/lib/tests/test_setups
creating build/lib/tests/test_datasets
copying tests/test_datasets/__init__.py -> build/lib/tests/test_datasets
copying tests/test_datasets/test_dataset.py -> build/lib/tests/test_datasets
copying tests/test_datasets/test_dataset_functions.py -> build/lib/tests/test_datasets
creating build/lib/tests/test_openml
copying tests/test_openml/test_openml.py -> build/lib/tests/test_openml
copying tests/test_openml/__init__.py -> build/lib/tests/test_openml
copying tests/test_openml/test_config.py -> build/lib/tests/test_openml
creating build/lib/tests/test_tasks
copying tests/test_tasks/__init__.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_clustering_task.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_regression_task.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_task_methods.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_classification_task.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_task.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_split.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_learning_curve_task.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_supervised_task.py -> build/lib/tests/test_tasks
copying tests/test_tasks/test_task_functions.py -> build/lib/tests/test_tasks
creating build/lib/tests/test_flows/dummy_learn
copying tests/test_flows/dummy_learn/__init__.py -> build/lib/tests/test_flows/dummy_learn
copying tests/test_flows/dummy_learn/dummy_forest.py -> build/lib/tests/test_flows/dummy_learn
creating build/lib/tests/test_extensions/test_sklearn_extension
copying tests/test_extensions/test_sklearn_extension/__init__.py -> build/lib/tests/test_extensions/test_sklearn_extension
copying tests/test_extensions/test_sklearn_extension/test_sklearn_extension.py -> build/lib/tests/test_extensions/test_sklearn_extension
creating build/lib/openml/evaluations
copying openml/evaluations/__init__.py -> build/lib/openml/evaluations
copying openml/evaluations/evaluation.py -> build/lib/openml/evaluations
copying openml/evaluations/functions.py -> build/lib/openml/evaluations
creating build/lib/openml/study
copying openml/study/__init__.py -> build/lib/openml/study
copying openml/study/study.py -> build/lib/openml/study
copying openml/study/functions.py -> build/lib/openml/study
creating build/lib/openml/runs
copying openml/runs/__init__.py -> build/lib/openml/runs
copying openml/runs/run.py -> build/lib/openml/runs
copying openml/runs/trace.py -> build/lib/openml/runs
copying openml/runs/functions.py -> build/lib/openml/runs
creating build/lib/openml/setups
copying openml/setups/__init__.py -> build/lib/openml/setups
copying openml/setups/setup.py -> build/lib/openml/setups
copying openml/setups/functions.py -> build/lib/openml/setups
creating build/lib/openml/datasets
copying openml/datasets/__init__.py -> build/lib/openml/datasets
copying openml/datasets/data_feature.py -> build/lib/openml/datasets
copying openml/datasets/dataset.py -> build/lib/openml/datasets
copying openml/datasets/functions.py -> build/lib/openml/datasets
creating build/lib/openml/flows
copying openml/flows/__init__.py -> build/lib/openml/flows
copying openml/flows/flow.py -> build/lib/openml/flows
copying openml/flows/functions.py -> build/lib/openml/flows
creating build/lib/openml/extensions
copying openml/extensions/__init__.py -> build/lib/openml/extensions
copying openml/extensions/extension_interface.py -> build/lib/openml/extensions
copying openml/extensions/functions.py -> build/lib/openml/extensions
creating build/lib/openml/tasks
copying openml/tasks/__init__.py -> build/lib/openml/tasks
copying openml/tasks/split.py -> build/lib/openml/tasks
copying openml/tasks/task.py -> build/lib/openml/tasks
copying openml/tasks/functions.py -> build/lib/openml/tasks
creating build/lib/openml/extensions/sklearn
copying openml/extensions/sklearn/__init__.py -> build/lib/openml/extensions/sklearn
copying openml/extensions/sklearn/extension.py -> build/lib/openml/extensions/sklearn
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/tests
creating build/bdist.linux-x86_64/egg/tests/test_examples
copying build/lib/tests/test_examples/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_examples
copying build/lib/tests/test_examples/test_OpenMLDemo.py -> build/bdist.linux-x86_64/egg/tests/test_examples
creating build/bdist.linux-x86_64/egg/tests/test_flows
copying build/lib/tests/test_flows/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_flows
creating build/bdist.linux-x86_64/egg/tests/test_flows/dummy_learn
copying build/lib/tests/test_flows/dummy_learn/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_flows/dummy_learn
copying build/lib/tests/test_flows/dummy_learn/dummy_forest.py -> build/bdist.linux-x86_64/egg/tests/test_flows/dummy_learn
copying build/lib/tests/test_flows/test_flow.py -> build/bdist.linux-x86_64/egg/tests/test_flows
copying build/lib/tests/test_flows/test_flow_functions.py -> build/bdist.linux-x86_64/egg/tests/test_flows
copying build/lib/tests/__init__.py -> build/bdist.linux-x86_64/egg/tests
creating build/bdist.linux-x86_64/egg/tests/test_runs
copying build/lib/tests/test_runs/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_runs
copying build/lib/tests/test_runs/test_run.py -> build/bdist.linux-x86_64/egg/tests/test_runs
copying build/lib/tests/test_runs/test_trace.py -> build/bdist.linux-x86_64/egg/tests/test_runs
copying build/lib/tests/test_runs/test_run_functions.py -> build/bdist.linux-x86_64/egg/tests/test_runs
creating build/bdist.linux-x86_64/egg/tests/test_utils
copying build/lib/tests/test_utils/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_utils
copying build/lib/tests/test_utils/test_utils.py -> build/bdist.linux-x86_64/egg/tests/test_utils
creating build/bdist.linux-x86_64/egg/tests/test_extensions
copying build/lib/tests/test_extensions/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_extensions
creating build/bdist.linux-x86_64/egg/tests/test_extensions/test_sklearn_extension
copying build/lib/tests/test_extensions/test_sklearn_extension/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_extensions/test_sklearn_extension
copying build/lib/tests/test_extensions/test_sklearn_extension/test_sklearn_extension.py -> build/bdist.linux-x86_64/egg/tests/test_extensions/test_sklearn_extension
copying build/lib/tests/test_extensions/test_functions.py -> build/bdist.linux-x86_64/egg/tests/test_extensions
creating build/bdist.linux-x86_64/egg/tests/test_setups
copying build/lib/tests/test_setups/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_setups
copying build/lib/tests/test_setups/test_setup_functions.py -> build/bdist.linux-x86_64/egg/tests/test_setups
creating build/bdist.linux-x86_64/egg/tests/test_datasets
copying build/lib/tests/test_datasets/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_datasets
copying build/lib/tests/test_datasets/test_dataset.py -> build/bdist.linux-x86_64/egg/tests/test_datasets
copying build/lib/tests/test_datasets/test_dataset_functions.py -> build/bdist.linux-x86_64/egg/tests/test_datasets
creating build/bdist.linux-x86_64/egg/tests/test_openml
copying build/lib/tests/test_openml/test_openml.py -> build/bdist.linux-x86_64/egg/tests/test_openml
copying build/lib/tests/test_openml/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_openml
copying build/lib/tests/test_openml/test_config.py -> build/bdist.linux-x86_64/egg/tests/test_openml
creating build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/__init__.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_clustering_task.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_regression_task.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_task_methods.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_classification_task.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_task.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_split.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_learning_curve_task.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_supervised_task.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
copying build/lib/tests/test_tasks/test_task_functions.py -> build/bdist.linux-x86_64/egg/tests/test_tasks
creating build/bdist.linux-x86_64/egg/openml
creating build/bdist.linux-x86_64/egg/openml/evaluations
copying build/lib/openml/evaluations/__init__.py -> build/bdist.linux-x86_64/egg/openml/evaluations
copying build/lib/openml/evaluations/evaluation.py -> build/bdist.linux-x86_64/egg/openml/evaluations
copying build/lib/openml/evaluations/functions.py -> build/bdist.linux-x86_64/egg/openml/evaluations
copying build/lib/openml/__init__.py -> build/bdist.linux-x86_64/egg/openml
creating build/bdist.linux-x86_64/egg/openml/study
copying build/lib/openml/study/__init__.py -> build/bdist.linux-x86_64/egg/openml/study
copying build/lib/openml/study/study.py -> build/bdist.linux-x86_64/egg/openml/study
copying build/lib/openml/study/functions.py -> build/bdist.linux-x86_64/egg/openml/study
creating build/bdist.linux-x86_64/egg/openml/runs
copying build/lib/openml/runs/__init__.py -> build/bdist.linux-x86_64/egg/openml/runs
copying build/lib/openml/runs/run.py -> build/bdist.linux-x86_64/egg/openml/runs
copying build/lib/openml/runs/trace.py -> build/bdist.linux-x86_64/egg/openml/runs
copying build/lib/openml/runs/functions.py -> build/bdist.linux-x86_64/egg/openml/runs
copying build/lib/openml/config.py -> build/bdist.linux-x86_64/egg/openml
creating build/bdist.linux-x86_64/egg/openml/setups
copying build/lib/openml/setups/__init__.py -> build/bdist.linux-x86_64/egg/openml/setups
copying build/lib/openml/setups/setup.py -> build/bdist.linux-x86_64/egg/openml/setups
copying build/lib/openml/setups/functions.py -> build/bdist.linux-x86_64/egg/openml/setups
creating build/bdist.linux-x86_64/egg/openml/datasets
copying build/lib/openml/datasets/__init__.py -> build/bdist.linux-x86_64/egg/openml/datasets
copying build/lib/openml/datasets/data_feature.py -> build/bdist.linux-x86_64/egg/openml/datasets
copying build/lib/openml/datasets/dataset.py -> build/bdist.linux-x86_64/egg/openml/datasets
copying build/lib/openml/datasets/functions.py -> build/bdist.linux-x86_64/egg/openml/datasets
copying build/lib/openml/_api_calls.py -> build/bdist.linux-x86_64/egg/openml
copying build/lib/openml/__version__.py -> build/bdist.linux-x86_64/egg/openml
creating build/bdist.linux-x86_64/egg/openml/flows
copying build/lib/openml/flows/__init__.py -> build/bdist.linux-x86_64/egg/openml/flows
copying build/lib/openml/flows/flow.py -> build/bdist.linux-x86_64/egg/openml/flows
copying build/lib/openml/flows/functions.py -> build/bdist.linux-x86_64/egg/openml/flows
copying build/lib/openml/utils.py -> build/bdist.linux-x86_64/egg/openml
copying build/lib/openml/exceptions.py -> build/bdist.linux-x86_64/egg/openml
creating build/bdist.linux-x86_64/egg/openml/extensions
copying build/lib/openml/extensions/__init__.py -> build/bdist.linux-x86_64/egg/openml/extensions
creating build/bdist.linux-x86_64/egg/openml/extensions/sklearn
copying build/lib/openml/extensions/sklearn/__init__.py -> build/bdist.linux-x86_64/egg/openml/extensions/sklearn
copying build/lib/openml/extensions/sklearn/extension.py -> build/bdist.linux-x86_64/egg/openml/extensions/sklearn
copying build/lib/openml/extensions/extension_interface.py -> build/bdist.linux-x86_64/egg/openml/extensions
copying build/lib/openml/extensions/functions.py -> build/bdist.linux-x86_64/egg/openml/extensions
copying build/lib/openml/testing.py -> build/bdist.linux-x86_64/egg/openml
creating build/bdist.linux-x86_64/egg/openml/tasks
copying build/lib/openml/tasks/__init__.py -> build/bdist.linux-x86_64/egg/openml/tasks
copying build/lib/openml/tasks/split.py -> build/bdist.linux-x86_64/egg/openml/tasks
copying build/lib/openml/tasks/task.py -> build/bdist.linux-x86_64/egg/openml/tasks
copying build/lib/openml/tasks/functions.py -> build/bdist.linux-x86_64/egg/openml/tasks
byte-compiling build/bdist.linux-x86_64/egg/tests/test_examples/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_examples/test_OpenMLDemo.py to test_OpenMLDemo.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_flows/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_flows/dummy_learn/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_flows/dummy_learn/dummy_forest.py to dummy_forest.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_flows/test_flow.py to test_flow.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_flows/test_flow_functions.py to test_flow_functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_runs/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_runs/test_run.py to test_run.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_runs/test_trace.py to test_trace.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_runs/test_run_functions.py to test_run_functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_utils/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_utils/test_utils.py to test_utils.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_extensions/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_extensions/test_sklearn_extension/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_extensions/test_sklearn_extension/test_sklearn_extension.py to test_sklearn_extension.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_extensions/test_functions.py to test_functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_setups/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_setups/test_setup_functions.py to test_setup_functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_datasets/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_datasets/test_dataset.py to test_dataset.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_datasets/test_dataset_functions.py to test_dataset_functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_openml/test_openml.py to test_openml.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_openml/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_openml/test_config.py to test_config.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_clustering_task.py to test_clustering_task.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_regression_task.py to test_regression_task.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_task_methods.py to test_task_methods.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_classification_task.py to test_classification_task.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_task.py to test_task.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_split.py to test_split.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_learning_curve_task.py to test_learning_curve_task.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_supervised_task.py to test_supervised_task.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/tests/test_tasks/test_task_functions.py to test_task_functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/evaluations/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/evaluations/evaluation.py to evaluation.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/evaluations/functions.py to functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/study/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/study/study.py to study.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/study/functions.py to functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/runs/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/runs/run.py to run.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/runs/trace.py to trace.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/runs/functions.py to functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/config.py to config.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/setups/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/setups/setup.py to setup.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/setups/functions.py to functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/datasets/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/datasets/data_feature.py to data_feature.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/datasets/dataset.py to dataset.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/datasets/functions.py to functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/_api_calls.py to _api_calls.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/__version__.py to __version__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/flows/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/flows/flow.py to flow.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/flows/functions.py to functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/utils.py to utils.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/exceptions.py to exceptions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/extensions/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/extensions/sklearn/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/extensions/sklearn/extension.py to extension.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/extensions/extension_interface.py to extension_interface.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/extensions/functions.py to functions.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/testing.py to testing.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/tasks/__init__.py to __init__.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/tasks/split.py to split.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/tasks/task.py to task.cpython-37.pyc
byte-compiling build/bdist.linux-x86_64/egg/openml/tasks/functions.py to functions.cpython-37.pyc
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying openml.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying openml.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying openml.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying openml.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying openml.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
openml.__pycache__.testing.cpython-37: module references __file__
tests.test_examples.__pycache__.test_OpenMLDemo.cpython-37: module references __file__
tests.test_extensions.__pycache__.test_functions.cpython-37: module MAY be using inspect.stack
tests.test_extensions.test_sklearn_extension.__pycache__.test_sklearn_extension.cpython-37: module references __file__
creating 'dist/openml-0.9.0-py3.7.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing openml-0.9.0-py3.7.egg
creating /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/openml-0.9.0-py3.7.egg
Extracting openml-0.9.0-py3.7.egg to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding openml 0.9.0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/openml-0.9.0-py3.7.egg
Processing dependencies for openml==0.9.0
Searching for numpy>=1.6.2
Reading https://pypi.org/simple/numpy/
Downloading https://files.pythonhosted.org/packages/77/fe/fbf07df5c86d94b4874fd37ba3aef1189497494186e3af7890cce9fa103e/numpy-1.17.0rc1-cp37-cp37m-manylinux1_x86_64.whl#sha256=21b1a68dffca1af1936d35d40afbeda30e290ab2d398f6af6cc79bfa23e9957b
Best match: numpy 1.17.0rc1
Processing numpy-1.17.0rc1-cp37-cp37m-manylinux1_x86_64.whl
Installing numpy-1.17.0rc1-cp37-cp37m-manylinux1_x86_64.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding numpy 1.17.0rc1 to easy-install.pth file
Installing f2py script to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/bin
Installing f2py3 script to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/bin
Installing f2py3.7 script to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/bin
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/numpy-1.17.0rc1-py3.7-linux-x86_64.egg
Searching for scipy>=0.13.3
Reading https://pypi.org/simple/scipy/
Downloading https://files.pythonhosted.org/packages/5d/bd/c0feba81fb60e231cf40fc8a322ed5873c90ef7711795508692b1481a4ae/scipy-1.3.0-cp37-cp37m-manylinux1_x86_64.whl#sha256=c5ea60ece0c0c1c849025bfc541b60a6751b491b6f11dd9ef37ab5b8c9041921
Best match: scipy 1.3.0
Processing scipy-1.3.0-cp37-cp37m-manylinux1_x86_64.whl
Installing scipy-1.3.0-cp37-cp37m-manylinux1_x86_64.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
writing requirements to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/scipy-1.3.0-py3.7-linux-x86_64.egg/EGG-INFO/requires.txt
Adding scipy 1.3.0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/scipy-1.3.0-py3.7-linux-x86_64.egg
Searching for pandas>=0.19.2
Reading https://pypi.org/simple/pandas/
Downloading https://files.pythonhosted.org/packages/0e/a8/d34b513e409fa0f8e5e35edfeab55d0c090b3e6095b16182585a4a0e2709/pandas-0.25.0rc0-cp37-cp37m-manylinux1_x86_64.whl#sha256=71c5a3d0d013f5825e1c45aa79ecd2c7cce8d47f7544a5916804fd0406c7e0b7
Best match: pandas 0.25.0rc0
Processing pandas-0.25.0rc0-cp37-cp37m-manylinux1_x86_64.whl
Installing pandas-0.25.0rc0-cp37-cp37m-manylinux1_x86_64.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
writing requirements to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/pandas-0.25.0rc0-py3.7-linux-x86_64.egg/EGG-INFO/requires.txt
Adding pandas 0.25.0rc0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/pandas-0.25.0rc0-py3.7-linux-x86_64.egg
Searching for python-dateutil
Reading https://pypi.org/simple/python-dateutil/
Downloading https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl#sha256=7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb
Best match: python-dateutil 2.8.0
Processing python_dateutil-2.8.0-py2.py3-none-any.whl
Installing python_dateutil-2.8.0-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
writing requirements to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/python_dateutil-2.8.0-py3.7.egg/EGG-INFO/requires.txt
Adding python-dateutil 2.8.0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/python_dateutil-2.8.0-py3.7.egg
Searching for scikit-learn>=0.18
Reading https://pypi.org/simple/scikit-learn/
Downloading https://files.pythonhosted.org/packages/21/a4/a48bd4b0d15395362b561df7e7247de87291105eb736a3b2aaffebf437b9/scikit_learn-0.21.2-cp37-cp37m-manylinux1_x86_64.whl#sha256=acba6bf5928e415b6296799a7aa069b66254c9440bce88ed2e5915865a317093
Best match: scikit-learn 0.21.2
Processing scikit_learn-0.21.2-cp37-cp37m-manylinux1_x86_64.whl
Installing scikit_learn-0.21.2-cp37-cp37m-manylinux1_x86_64.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
writing requirements to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/scikit_learn-0.21.2-py3.7-linux-x86_64.egg/EGG-INFO/requires.txt
Adding scikit-learn 0.21.2 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/scikit_learn-0.21.2-py3.7-linux-x86_64.egg
Searching for requests
Reading https://pypi.org/simple/requests/
Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl#sha256=9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31
Best match: requests 2.22.0
Processing requests-2.22.0-py2.py3-none-any.whl
Installing requests-2.22.0-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
writing requirements to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/requests-2.22.0-py3.7.egg/EGG-INFO/requires.txt
Adding requests 2.22.0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/requests-2.22.0-py3.7.egg
Searching for xmltodict
Reading https://pypi.org/simple/xmltodict/
Downloading https://files.pythonhosted.org/packages/28/fd/30d5c1d3ac29ce229f6bdc40bbc20b28f716e8b363140c26eff19122d8a5/xmltodict-0.12.0-py2.py3-none-any.whl#sha256=8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051
Best match: xmltodict 0.12.0
Processing xmltodict-0.12.0-py2.py3-none-any.whl
Installing xmltodict-0.12.0-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding xmltodict 0.12.0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/xmltodict-0.12.0-py3.7.egg
Searching for liac-arff>=2.4.0
Reading https://pypi.org/simple/liac-arff/
Downloading https://files.pythonhosted.org/packages/e9/35/fbc9217cfa91d98888b43e1a19c03a50d716108c58494c558c65e308f372/liac-arff-2.4.0.tar.gz#sha256=47afcd1fd248b2892f66075987422d0576fc2c2fd0811d0cbd32f2135b065df5
Best match: liac-arff 2.4.0
Processing liac-arff-2.4.0.tar.gz
Writing /tmp/easy_install-3tyja7ba/liac-arff-2.4.0/setup.cfg
Running liac-arff-2.4.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-3tyja7ba/liac-arff-2.4.0/egg-dist-tmp-hyv1j_i2
zip_safe flag not set; analyzing archive contents...
Moving liac_arff-2.4.0-py3.7.egg to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding liac-arff 2.4.0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/liac_arff-2.4.0-py3.7.egg
Searching for pytz>=2017.2
Reading https://pypi.org/simple/pytz/
Downloading https://files.pythonhosted.org/packages/3d/73/fe30c2daaaa0713420d0382b16fbb761409f532c56bdcc514bf7b6262bb6/pytz-2019.1-py2.py3-none-any.whl#sha256=303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda
Best match: pytz 2019.1
Processing pytz-2019.1-py2.py3-none-any.whl
Installing pytz-2019.1-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding pytz 2019.1 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/pytz-2019.1-py3.7.egg
Searching for six>=1.5
Reading https://pypi.org/simple/six/
Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl#sha256=3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c
Best match: six 1.12.0
Processing six-1.12.0-py2.py3-none-any.whl
Installing six-1.12.0-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding six 1.12.0 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/six-1.12.0-py3.7.egg
Searching for joblib>=0.11
Reading https://pypi.org/simple/joblib/
Downloading https://files.pythonhosted.org/packages/cd/c1/50a758e8247561e58cb87305b1e90b171b8c767b15b12a1734001f41d356/joblib-0.13.2-py2.py3-none-any.whl#sha256=21e0c34a69ad7fde4f2b1f3402290e9ec46f545f15f1541c582edfe05d87b63a
Best match: joblib 0.13.2
Processing joblib-0.13.2-py2.py3-none-any.whl
Installing joblib-0.13.2-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding joblib 0.13.2 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/joblib-0.13.2-py3.7.egg
Searching for urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
Reading https://pypi.org/simple/urllib3/
Downloading https://files.pythonhosted.org/packages/e6/60/247f23a7121ae632d62811ba7f273d0e58972d75e58a94d329d51550a47d/urllib3-1.25.3-py2.py3-none-any.whl#sha256=b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1
Best match: urllib3 1.25.3
Processing urllib3-1.25.3-py2.py3-none-any.whl
Installing urllib3-1.25.3-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
writing requirements to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/urllib3-1.25.3-py3.7.egg/EGG-INFO/requires.txt
Adding urllib3 1.25.3 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/urllib3-1.25.3-py3.7.egg
Searching for idna<2.9,>=2.5
Reading https://pypi.org/simple/idna/
Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl#sha256=ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c
Best match: idna 2.8
Processing idna-2.8-py2.py3-none-any.whl
Installing idna-2.8-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding idna 2.8 to easy-install.pth file
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/idna-2.8-py3.7.egg
Searching for chardet<3.1.0,>=3.0.2
Reading https://pypi.org/simple/chardet/
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl#sha256=fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691
Best match: chardet 3.0.4
Processing chardet-3.0.4-py2.py3-none-any.whl
Installing chardet-3.0.4-py2.py3-none-any.whl to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Adding chardet 3.0.4 to easy-install.pth file
Installing chardetect script to /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/bin
Installed /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages/chardet-3.0.4-py3.7.egg
Searching for certifi==2019.6.16
Best match: certifi 2019.6.16
Adding certifi 2019.6.16 to easy-install.pth file
Using /home/feurerm/miniconda/3-4.5.4/envs/testopenmlissue/lib/python3.7/site-packages
Finished processing dependencies for openml==0.9.0
If you guys agree, I suggest to replace the check to see if the wheel package is installed, and if not, refuse installation.
I think you may want to drop this requirement entirely, or replace it with a warning of some sort, plus strong documentation to not invoke setup.py install. We over at setuptools are trying to deprecate setup.py install and other direct invocations of setup.py, but it's been difficult for reasons like this - things that are doing the right thing but are implemented in terms of setup.py install (which is fine).
I was originally thinking that adding a pyproject.toml with a build-system section (for PEP 517 support) might solve your problem somewhat, but I think it won't, particularly if you are using editable installs (I still think it's a good idea, just I can't think of a way to salvage the "error out when someone invoked setup.py install directly" behavior).
The original reason for prohibiting the invocation of setup.py install was to make sure that numpy, scipy and scikit-learn aren't compiled. This is most likely the product of a non-conda environment. I'm afraid that a warning won't do because an installation with setup.py install produces a long log in which the warning won't be easily visible.
Potentially we should ask for confirmation by making the user type a yes?
In any case, we should add a link to the docs to the error message.
@mfeurer The problem is that I don't think it's possible to do what you want to do, because there's no clear way to distinguish between direct and indirect invocations of setup.py install. Additionally, even pip install openml will end up building numpy from source if it's not already installed and no wheel is available for the platform the person is trying to build upon.
The problem is that as long as you're not installing from a wheel (or installing in develop mode), setup.py installwill be invoked.
See:
pip install --no-binary openml openml
This will always fail. Using pip install -e is just sort of accidentally getting around the problem because it's invoking setup.py develop, which is probably more problematic than setup.py install!
I think you should probably just give up on trying to stop your users from doing the wrong thing by accident, because you are likely to cause problems for people actually doing the right thing in the first place.
Potentially we should ask for confirmation by making the user type a yes?
This will almost certainly fail, because pip install may eat any outputs to sys.stdout, and will probably hard-fail on any inputs. pip install is not usually an interactive command.
Like I said, what you are trying to do here is admirable, but if it were possible, we would have already done it in setuptools. The best thing you can do is to document that this is installed with pip install and notsetup.py install, and that in some situations installation with conda will provide a smoother user experience.
Thank you for your help and explanations @pganssle. What do you think of the solution of scikit-learn which checks itself that the libraries in question are installed?
Anyway, I guess we'll better remove these lines again as they appear to cause more trouble than good.
@mfeurer I actually recommend removing as much logic as possible from your setup.py. Unless you need those libraries installed at build time (in which case they should go in pyproject.toml), I would recommend against checking for them in your setup.py.
Generally speaking, you should think of your setup.py as a script that takes your project and turns it into a wheel to be installed, not as something that is to be executed in the target environment (assuming you can avoid it). This is useful because ideally your package (which in this case seems to be pure Python, so is very amenable to this) should be able to be "cross-compiled", which is to say that you can generate a universal (not python version or environment specific) wheel and publish that. In that case setup.py is only ever executed on the build machine.
For a good overview of current python packaging, see Bernat Gabor's series of 3 articles on The State of Python Packaging.
Activity
mfeurer commentedon Jul 9, 2019
Thanks for reporting this. We'll have a look into this.
PGijsbers commentedon Jul 12, 2019
I can not reproduce the issue locally. Does the full output of the
pip install openmlcommand provide more information (and if so, could you provide the full output)?azrdev commentedon Jul 13, 2019
@PGijsbers full stdout/stderr below. As I wrote, it prints that warning from
setup.py.PGijsbers commentedon Jul 15, 2019
Thanks @azrdev. Of course I did not doubt you were speaking the truth, the reason I asked for the output is that we can see if there is other identifying information which allows us to spot if
setup.pyhas been called frompipor not. Sorry if you had the wrong impression.In this case, we see
setup.pygets called with quite a few additional arguments if it is called frompip, in particular a--recordoption to a temporary file with 'pip' in its name. @mfeurer what about specifically checking for this condition to detect usage ofpip?mfeurer commentedon Jul 15, 2019
Hey, could it be that a missing wheel is the reason why
python setup.py installinstalls packages by compiling the source? I just created an empty conda environment and install openml withpython setup.py installand it took ~1 minute and didn't compile anything.The log:
If you guys agree, I suggest to replace the check to see if the wheel package is installed, and if not, refuse installation.
PGijsbers commentedon Jul 17, 2019
Sorry I'm confused, why did
not error out? Did you change to setup script to ignore it to see if it would fail(/build numpy)?
But I guess it makes sense that we could check for
wheel.mfeurer commentedon Jul 17, 2019
I commented it out to see what happens. Sorry for not mentioning that.
PGijsbers commentedon Jul 17, 2019
Ok, cool. Then it seems like it makes the most sense to just check for the
wheelpackage indeed. I would be fine with that solution.pganssle commentedon Jul 21, 2019
I think you may want to drop this requirement entirely, or replace it with a warning of some sort, plus strong documentation to not invoke
setup.py install. We over atsetuptoolsare trying to deprecatesetup.py installand other direct invocations ofsetup.py, but it's been difficult for reasons like this - things that are doing the right thing but are implemented in terms ofsetup.py install(which is fine).I was originally thinking that adding a
pyproject.tomlwith abuild-systemsection (for PEP 517 support) might solve your problem somewhat, but I think it won't, particularly if you are using editable installs (I still think it's a good idea, just I can't think of a way to salvage the "error out when someone invokedsetup.py installdirectly" behavior).mfeurer commentedon Jul 22, 2019
Thanks for your comments @pganssle
The original reason for prohibiting the invocation of
setup.py installwas to make sure that numpy, scipy and scikit-learn aren't compiled. This is most likely the product of a non-conda environment. I'm afraid that a warning won't do because an installation withsetup.py installproduces a long log in which the warning won't be easily visible.Potentially we should ask for confirmation by making the user type a
yes?In any case, we should add a link to the docs to the error message.
pganssle commentedon Jul 22, 2019
@mfeurer The problem is that I don't think it's possible to do what you want to do, because there's no clear way to distinguish between direct and indirect invocations of
setup.py install. Additionally, evenpip install openmlwill end up buildingnumpyfrom source if it's not already installed and no wheel is available for the platform the person is trying to build upon.The problem is that as long as you're not installing from a wheel (or installing in develop mode),
setup.py installwill be invoked.See:
This will always fail. Using
pip install -eis just sort of accidentally getting around the problem because it's invokingsetup.py develop, which is probably more problematic thansetup.py install!I think you should probably just give up on trying to stop your users from doing the wrong thing by accident, because you are likely to cause problems for people actually doing the right thing in the first place.
This will almost certainly fail, because
pip installmay eat any outputs tosys.stdout, and will probably hard-fail on any inputs.pip installis not usually an interactive command.Like I said, what you are trying to do here is admirable, but if it were possible, we would have already done it in
setuptools. The best thing you can do is to document that this is installed withpip installand notsetup.py install, and that in some situations installation withcondawill provide a smoother user experience.mfeurer commentedon Jul 22, 2019
Thank you for your help and explanations @pganssle. What do you think of the solution of scikit-learn which checks itself that the libraries in question are installed?
Anyway, I guess we'll better remove these lines again as they appear to cause more trouble than good.
pganssle commentedon Jul 22, 2019
@mfeurer I actually recommend removing as much logic as possible from your
setup.py. Unless you need those libraries installed at build time (in which case they should go inpyproject.toml), I would recommend against checking for them in yoursetup.py.Generally speaking, you should think of your
setup.pyas a script that takes your project and turns it into awheelto be installed, not as something that is to be executed in the target environment (assuming you can avoid it). This is useful because ideally your package (which in this case seems to be pure Python, so is very amenable to this) should be able to be "cross-compiled", which is to say that you can generate a universal (not python version or environment specific) wheel and publish that. In that casesetup.pyis only ever executed on the build machine.For a good overview of current python packaging, see Bernat Gabor's series of 3 articles on The State of Python Packaging.