Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pip install pyarrow does not work on python 3.7 #1125

Closed
kootenpv opened this issue Sep 23, 2017 · 24 comments
Closed

pip install pyarrow does not work on python 3.7 #1125

kootenpv opened this issue Sep 23, 2017 · 24 comments

Comments

@kootenpv
Copy link

Even after installing Cython before, manually.

@wesm
Copy link
Member

wesm commented Sep 23, 2017

We probably aren't going to publish Python 3.7 wheels until 3.7.0 final is out. There is already https://issues.apache.org/jira/browse/ARROW-1535 which would enable source installs to work, would you be able to help with that?

@grimwm
Copy link

grimwm commented Oct 5, 2017

I am new here and a bit confused. I read #1099 and saw that you argue against source builds from "pip" because it involves a lot of work when libraries aren't already installed on the system. Are you still planning to have source builds be available, but just with the caveat that you have to install library requirements yourself ahead of time? I know that's common for e.g. MySQL-python.

@wesm
Copy link
Member

wesm commented Oct 6, 2017

Yes, that's what ARROW-1535 is about, so hopefully the 0.8.0 will be able to build from source from PyPI. We are building .deb and .rpm packages for the C++ libraries so installing these on most Linux systems without building some source should not be too bad

@wesm
Copy link
Member

wesm commented Oct 9, 2017

ARROW-1535 is resolved so the sdist artifact should be able to be installed. If you could help kick the tires with Python 3.7 before Arrow 0.8.0 is released (end of October / early November) that would be helpful in case we missed some detail

@kootenpv
Copy link
Author

kootenpv commented Oct 9, 2017

This is the situation for me:

pascal@archbook:~$ pip3.7 install --no-cache pyarrow
Collecting pyarrow
  Downloading pyarrow-0.3.0.tar.gz (78kB)

It is using 0.3.0 and not 0.7.1.

I also tried copying the manylinux wheel and renaming it, so it should work with 3.7, but it misses the C++ bindings. Somehow the C++ bindings cannot be found even though 3.6 is using them.

@wesm
Copy link
Member

wesm commented Oct 9, 2017

@kootenpv you will have to test using a tarball built from trunk (i.e. setup.py sdist), we have not made a release including ARROW-1535 yet

@kootenpv
Copy link
Author

kootenpv commented Oct 9, 2017

It sounded like a really cool way to do it! I wasn't able to do it though :(. The best I can do is explain what I've tried.

git clone --depth 1 git://git.apache.org/arrow.git
cd arrow/cpp
mkdir release
cd release
# used pyenv to make python3.7 the "main" python
# it prints the python paths seemingly correctly, no errors
cmake .. -DCMAKE_BUILD_TYPE=Release -DARROW_PYTHON=on
cd ..
cd python
python3.7 setup.py sdist
pip3.7 install pyarrow-0.1.dev1+ga0555c0.tar.gz 

On that command, I get output ending with:

    COLLECT_GCC=/usr/bin/c++
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/lto-wrapper
    Target: x86_64-pc-linux-gnu
    Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release --enable-default-pie --enable-default-ssp
    Thread model: posix
    gcc version 7.2.0 (GCC)
    
    INFOCompiler id: GNU
    Selected compiler gcc 7.2.0
    -- Performing Test CXX_SUPPORTS_SSE3
    -- Performing Test CXX_SUPPORTS_SSE3 - Success
    -- Performing Test CXX_SUPPORTS_ALTIVEC
    -- Performing Test CXX_SUPPORTS_ALTIVEC - Failed
    Configured for DEBUG build (set with cmake -DCMAKE_BUILD_TYPE={release,debug,...})
    -- Build Type: DEBUG
    -- Build output directory: /tmp/pip-8v5epfm6-build/build/temp.linux-x86_64-3.7/debug/
    -- Found PythonInterp: /home/pascal/.pyenv/versions/3.7-dev/bin/python3.7 (found version "3.7")
    -- Searching for Python libs in /home/pascal/.pyenv/versions/3.7-dev/lib64;/home/pascal/.pyenv/versions/3.7-dev/lib;/home/pascal/.pyenv/versions/3.7-dev/lib/python3.7/config-3.7m-x86_64-linux-gnu
    -- Looking for python3.7m
    -- Found Python lib /home/pascal/.pyenv/versions/3.7-dev/lib/libpython3.7m.a
    -- Found PythonLibs: /home/pascal/.pyenv/versions/3.7-dev/lib/libpython3.7m.a
    -- Found NumPy: version "1.13.1" /home/pascal/.pyenv/versions/3.7-dev/lib/python3.7/site-packages/numpy/core/include
    -- Found Cython: /home/pascal/.pyenv/versions/3.7-dev/bin/cython
    -- Searching for Python libs in /home/pascal/.pyenv/versions/3.7-dev/lib64;/home/pascal/.pyenv/versions/3.7-dev/lib;/home/pascal/.pyenv/versions/3.7-dev/lib/python3.7/config-3.7m-x86_64-linux-gnu
    -- Looking for python3.7m
    -- Found Python lib /home/pascal/.pyenv/versions/3.7-dev/lib/libpython3.7m.a
    -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2")
    -- Checking for module 'arrow'
    --   No package 'arrow' found
    CMake Error at cmake_modules/FindArrow.cmake:119 (message):
      Could not find the Arrow library.  Looked for headers in , and for libs in
    Call Stack (most recent call first):
      CMakeLists.txt:185 (find_package)

What am I doing wrong?

EDIT: doing make (after cmake), I reached 91% of building, until:

[ 91%] Building CXX object src/arrow/python/CMakeFiles/arrow_python_objlib.dir/python_to_arrow.cc.o
/home/pascal/gits/arrow/cpp/src/arrow/python/python_to_arrow.cc: In function ‘arrow::Status arrow::py::Append(PyObject*, PyObject*, arrow::py::SequenceBuilder*, std::vector<_object*>*, std::vector<_object*>*, std::vector<_object*>*, std::vector<_object*>*, std::vector<_object*>*)’:
/home/pascal/gits/arrow/cpp/src/arrow/python/python_to_arrow.cc:459:41: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
     char* data = PyUnicode_AsUTF8AndSize(elem, &size);
                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
make[2]: *** [src/arrow/python/CMakeFiles/arrow_python_objlib.dir/build.make:303: src/arrow/python/CMakeFiles/arrow_python_objlib.dir/python_to_arrow.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:2120: src/arrow/python/CMakeFiles/arrow_python_objlib.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

Strange, the error only seems to be found here: https://pastebin.com/L43rc3j0 which specifically mentions py3.7.

was using cmake .. -DCMAKE_BUILD_TYPE=Release -DARROW_PYTHON=on -DCMAKE_INSTALL_PREFIX=$ARROW_HOME and then make

@wesm
Copy link
Member

wesm commented Oct 9, 2017

I created https://issues.apache.org/jira/browse/ARROW-1661 to track fixing the libarrow_python build. Note that you must also install the libraries someplace (make install) and then either set $ARROW_HOME to this installation location and make sure that the libraries are in your LD_LIBRARY_PATH

@kootenpv
Copy link
Author

Doing make, before make install already fails. I tried following the guide and I noticed that it might be because I'm using the latest version of gcc/g++?

It happens around 40% of the make command, after cmake, before make install:

pascal@archbook:~/gits/arrow/cpp/release$ cat CMakeFiles/CMakeError.log 
Performing C++ SOURCE FILE Test CXX_SUPPORTS_ALTIVEC failed with the following output:
Change Dir: /home/pascal/egoroot/gits/arrow/cpp/release/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_64e22/fast"
/usr/bin/make -f CMakeFiles/cmTC_64e22.dir/build.make CMakeFiles/cmTC_64e22.dir/build
make[1]: Entering directory '/home/pascal/egoroot/gits/arrow/cpp/release/CMakeFiles/CMakeTmp'
Building CXX object CMakeFiles/cmTC_64e22.dir/src.cxx.o
/usr/bin/c++    -DCXX_SUPPORTS_ALTIVEC   -maltivec -o CMakeFiles/cmTC_64e22.dir/src.cxx.o -c /home/pascal/egoroot/gits/arrow/cpp/release/CMakeFiles/CMakeTmp/src.cxx
c++: error: unrecognized command line option '-maltivec'; did you mean '-mglibc'?
make[1]: *** [CMakeFiles/cmTC_64e22.dir/build.make:66: CMakeFiles/cmTC_64e22.dir/src.cxx.o] Error 1
make[1]: Leaving directory '/home/pascal/egoroot/gits/arrow/cpp/release/CMakeFiles/CMakeTmp'
make: *** [Makefile:126: cmTC_64e22/fast] Error 2

Source file was:
int main() { return 0; }
This is what I ran:

pyenv shell 3.7-dev # <-- installing pyenv, and installing py3.7 with it, you can test it yourself

export ARROW_HOME=$HOME/local
export ARROW_BUILD_TYPE=release

mkdir ~/gits/arrow/cpp/
cd ~/gits/arrow/cpp/release

cmake -DCMAKE_BUILD_TYPE=$ARROW_BUILD_TYPE \
-DCMAKE_INSTALL_PREFIX=$ARROW_HOME \
-DARROW_PYTHON=on \
-DARROW_BUILD_TESTS=OFF \
..

make -j8

@kootenpv
Copy link
Author

kootenpv commented Oct 12, 2017

I guess I forgot to mention I'm using Arch Linux, running the latest stuff does have a downside in this case.

I did 2 things and it got a lot further in the make.

export CC=gcc
export CXX=g++

and in cpp/cmake_modules/SetupCxxFlags.cmake I replaced -maltivec with -mglibc.

Now this is the case:

pascal@archbook:~/arrow/cpp/release$ make -j8
[ 15%] Built target brotli_ep
[ 15%] Built target lz4_ep
[ 22%] Built target zlib_ep
[ 30%] Built target zstd_ep
[ 38%] Built target snappy_ep
[ 45%] Built target rapidjson_ep
[ 52%] Built target flatbuffers_ep
[ 53%] Building CXX object src/arrow/python/CMakeFiles/arrow_python_objlib.dir/python_to_arrow.cc.o
[ 54%] Building CXX object src/arrow/python/CMakeFiles/arrow_python_objlib.dir/pyarrow.cc.o
Scanning dependencies of target metadata_fbs
[ 54%] Running flatc compiler on /home/pascal/gits/arrow/format/Message.fbs;/home/pascal/gits/arrow/format/File.fbs;/home/pascal/gits/arrow/format/Schema.fbs;/home/pascal/gits/arrow/format/Tensor.fbs;/home/pascal/gits/arrow/cpp/src/arrow/ipc/feather.fbs
[ 54%] Built target metadata_fbs
Scanning dependencies of target arrow_dependencies
[ 54%] Built target arrow_dependencies
Scanning dependencies of target arrow_objlib
[ 57%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/compression_snappy.cc.o
[ 57%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/compression_zstd.cc.o
[ 57%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/compression_zlib.cc.o
[ 58%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/array.cc.o
[ 59%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/compression_brotli.cc.o
[ 57%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/compression_lz4.cc.o
[ 61%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/buffer.cc.o
[ 61%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/builder.cc.o
[ 61%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/compare.cc.o
[ 62%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/memory_pool.cc.o
/home/pascal/gits/arrow/cpp/src/arrow/python/python_to_arrow.cc: In function ‘arrow::Status arrow::py::Append(PyObject*, PyObject*, arrow::py::SequenceBuilder*, std::vector<_object*>*, std::vector<_object*>*, std::vector<_object*>*, std::vector<_object*>*, std::vector<_object*>*)’:
/home/pascal/gits/arrow/cpp/src/arrow/python/python_to_arrow.cc:459:41: error: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]
     char* data = PyUnicode_AsUTF8AndSize(elem, &size);
                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
[ 63%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/pretty_print.cc.o
[ 64%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/status.cc.o
[ 65%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/table.cc.o
make[2]: *** [src/arrow/python/CMakeFiles/arrow_python_objlib.dir/build.make:303: src/arrow/python/CMakeFiles/arrow_python_objlib.dir/python_to_arrow.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1037: src/arrow/python/CMakeFiles/arrow_python_objlib.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 66%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/tensor.cc.o
[ 67%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/type.cc.o
[ 68%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/visitor.cc.o
[ 69%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/io/file.cc.o
[ 69%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/io/interfaces.cc.o
[ 70%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/io/memory.cc.o
[ 71%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/bit-util.cc.o
[ 72%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/compression.cc.o
[ 73%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/cpu-info.cc.o
[ 74%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/decimal.cc.o
[ 75%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/util/key_value_metadata.cc.o
[ 76%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/compute/cast.cc.o
[ 77%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/compute/context.cc.o
[ 77%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/io/hdfs.cc.o
[ 78%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/io/hdfs-internal.cc.o
[ 79%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/dictionary.cc.o
[ 80%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/feather.cc.o
[ 81%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/json.cc.o
[ 82%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/json-internal.cc.o
[ 83%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/message.cc.o
[ 84%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/metadata-internal.cc.o
[ 84%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/reader.cc.o
[ 85%] Building CXX object src/arrow/CMakeFiles/arrow_objlib.dir/ipc/writer.cc.o
In file included from /home/pascal/gits/arrow/cpp/src/arrow/buffer.h:28:0,
                 from /home/pascal/gits/arrow/cpp/src/arrow/array.h:27,
                 from /home/pascal/gits/arrow/cpp/src/arrow/ipc/json-internal.cc:28:
/home/pascal/gits/arrow/cpp/src/arrow/status.h: In function ‘arrow::Status arrow::ipc::json::internal::GetField(const Value&, const arrow::ipc::DictionaryMemo*, std::shared_ptr<arrow::Field>*)’:
/home/pascal/gits/arrow/cpp/src/arrow/status.h:68:19: warning: ‘dictionary_id’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     Status _s = (s);                     \
                   ^
/home/pascal/gits/arrow/cpp/src/arrow/ipc/json-internal.cc:896:13: note: ‘dictionary_id’ was declared here
     int64_t dictionary_id;
             ^~~~~~~~~~~~~
In file included from /home/pascal/gits/arrow/cpp/src/arrow/buffer.h:28:0,
                 from /home/pascal/gits/arrow/cpp/src/arrow/array.h:27,
                 from /home/pascal/gits/arrow/cpp/src/arrow/ipc/json-internal.cc:28:
/home/pascal/gits/arrow/cpp/src/arrow/status.h: In function ‘arrow::Status arrow::ipc::json::internal::ReadSchema(const Value&, arrow::MemoryPool*, std::shared_ptr<arrow::Schema>*)’:
/home/pascal/gits/arrow/cpp/src/arrow/status.h:68:19: warning: ‘dictionary_id’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     Status _s = (s);                     \
                   ^
/home/pascal/gits/arrow/cpp/src/arrow/ipc/json-internal.cc:1344:13: note: ‘dictionary_id’ was declared here
     int64_t dictionary_id;
             ^~~~~~~~~~~~~
[ 85%] Built target arrow_objlib
make: *** [Makefile:141: all] Error 2

When I use -fpermissive it worked.... I'm now trying make install

@kootenpv
Copy link
Author

kootenpv commented Oct 12, 2017

Full script so far:

# manually edit ~/gits/arrow/cpp/cmake_modules/SetupCxxFlags.cmake:
# -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_COMMON_FLAGS}")
# +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_COMMON_FLAGS} -fpermissive")
# -CHECK_CXX_COMPILER_FLAG("-maltivec" CXX_SUPPORTS_ALTIVEC)
# +CHECK_CXX_COMPILER_FLAG("-mglibc" CXX_SUPPORTS_ALTIVEC)
# -set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -maltivec")
# +set(CXX_COMMON_FLAGS "${CXX_COMMON_FLAGS} -mglibc")

export CC=gcc
export CXX=g++

pyenv shell 3.7-dev

export ARROW_BUILD_TYPE=release

rm -rf ~/gits/arrow/cpp/release
mkdir ~/gits/arrow/cpp/release
cd ~/gits/arrow/cpp/release

export ARROW_HOME=~/gits/arrow/cpp/release
export LD_LIBRARY_PATH=$ARROW_HOME/lib:$LD_LIBRARY_PATH
sudo ldconfig

cmake -DCMAKE_BUILD_TYPE=$ARROW_BUILD_TYPE \
-DCMAKE_INSTALL_PREFIX=$ARROW_HOME \
-DARROW_PYTHON=on \
-DARROW_BUILD_TESTS=OFF \
..

make -j8

make install

python setup.py build_ext --build-type=$ARROW_BUILD_TYPE --inplace

Result:

pascal@archbook:~/gits/arrow/python$ python setup.py build_ext --build-type=$ARROW_BUILD_TYPE --inplace
/home/pascal/gits/arrow/python/.eggs/setuptools_scm-0.0.0-py3.7.egg/setuptools_scm/git.py:56: UserWarning: "/home/pascal/gits/arrow" is shallow and may cause errors
running build_ext
-- Runnning cmake for pyarrow
cmake  -DPYTHON_EXECUTABLE=/home/pascal/.pyenv/versions/3.7-dev/bin/python  -DCMAKE_BUILD_TYPE=release /home/pascal/gits/arrow/python
INFOCompiler command: /usr/bin/g++
INFOCompiler version: Using built-in specs.
COLLECT_GCC=/usr/bin/g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release --enable-default-pie --enable-default-ssp
Thread model: posix
gcc version 7.2.0 (GCC) 

INFOCompiler id: GNU
Selected compiler gcc 7.2.0
Configured for RELEASE build (set with cmake -DCMAKE_BUILD_TYPE={release,debug,...})
-- Build Type: RELEASE
-- Build output directory: /home/pascal/gits/arrow/python/build/temp.linux-x86_64-3.7/release/
-- Searching for Python libs in /home/pascal/.pyenv/versions/3.7-dev/lib64;/home/pascal/.pyenv/versions/3.7-dev/lib;/home/pascal/.pyenv/versions/3.7-dev/lib/python3.7/config-3.7m-x86_64-linux-gnu
-- Looking for python3.7m
-- Found Python lib /home/pascal/.pyenv/versions/3.7-dev/lib/libpython3.7m.a
-- Searching for Python libs in /home/pascal/.pyenv/versions/3.7-dev/lib64;/home/pascal/.pyenv/versions/3.7-dev/lib;/home/pascal/.pyenv/versions/3.7-dev/lib/python3.7/config-3.7m-x86_64-linux-gnu
-- Looking for python3.7m
-- Found Python lib /home/pascal/.pyenv/versions/3.7-dev/lib/libpython3.7m.a
-- Found the Arrow core library: /home/pascal/gits/arrow/cpp/release/lib64/libarrow.so
-- Found the Arrow Python library: /home/pascal/gits/arrow/cpp/release/lib64/libarrow_python.so
Added shared library dependency arrow: /home/pascal/gits/arrow/cpp/release/lib64/libarrow.so
Added shared library dependency arrow_python: /home/pascal/gits/arrow/cpp/release/lib64/libarrow_python.so
CMake Error at cmake_modules/UseCython.cmake:95 (get_source_file_property):
  Cannot find source file:

    pyarrow/lib.pyx

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx
Call Stack (most recent call first):
  cmake_modules/UseCython.cmake:164 (compile_pyx)
  CMakeLists.txt:344 (cython_add_module)


CMake Error at CMakeLists.txt:375 (target_link_libraries):
  Cannot specify link libraries for target "lib" which is not built by this
  project.


-- Configuring incomplete, errors occurred!
See also "/home/pascal/gits/arrow/python/build/temp.linux-x86_64-3.7/CMakeFiles/CMakeOutput.log".
error: command 'cmake' failed with exit status 1

@wesm
Copy link
Member

wesm commented Oct 12, 2017

Can we move this discussion to JIRA? It seems there are multiple layers of issues here, including problems due to bleeding edge gcc. We don't have a lot of developers using bleeding-edge-everything so we will need to create a bunch of issues to tackle each problem in due course

@wesm
Copy link
Member

wesm commented Oct 12, 2017

@xhochy @cpcloud there is a lot going on in this issue that we need to catalog and come up with a triage plan. Has anyone else tried building with gcc7?

@xhochy
Copy link
Member

xhochy commented Oct 12, 2017

Seems like there are a lot of things that may interfere, it could also be that we detect some things like altivec support wrongly on Arch Linux. Yet I think most users were either Ubuntu/Debian or using the plain conda distribution.

@kootenpv
Copy link
Author

I'm out of ideas, but I'm willing to try stuff.

Should the discussion continue at https://issues.apache.org/jira/browse/ARROW-1661?

@xhochy
Copy link
Member

xhochy commented Oct 12, 2017

Seems like this is a problem with something of your system configuration or Python 3.7. Using the latest ArchLinux version, Python 3.6, GCC 7.2 and the manual from https://arrow.apache.org/docs/python/development.html#developing-on-linux-and-macos I got Arrow & Parquet successfully built. All tests except those for plasma succeed. Maybe building with an sdist is changing some behaviour.

@kootenpv
Copy link
Author

kootenpv commented Oct 13, 2017

@xhochy I have it working under Python 3.6 on the same machine (not building from source but from pip, haven't tried from source). It's specifically Python 3.7 and building it from source that seems to be the problem for my system.

@wesm
Copy link
Member

wesm commented Oct 16, 2017

@kootenpv would you be up for helping create a Dockerfile for a Python 3.7 build/test? Since 3.7.0 final is not slated until June 2018, this would be worth the effort to be able to reproducibly test until we have a full conda-based stack available for 3.7

@wesm
Copy link
Member

wesm commented Jan 18, 2018

Closing in favor of tracking on https://issues.apache.org/jira/browse/ARROW-1661

@stonebig
Copy link

still no Python-3.7 wheel on pypi ...

@wesm
Copy link
Member

wesm commented Aug 18, 2018

@stonebig would you like to lend a hand?

@yarco
Copy link

yarco commented Aug 21, 2018

You should probably add a warning on "https://arrow.apache.org/install/" saying that you currently cannot install with pip. The current text is misleading in that it tells me that it should work. I tried compiling/installing arrow/cpp from source (OSX / python 3.7) and then installing pyarrow==0.10.* with pip and it still did not work. Got a strange error

`Collecting pyarrow
Using cached https://files.pythonhosted.org/packages/c0/a0/f7e9dfd8988d94f4952f9b50eb04e14a80fbe39218520725aab53daab57c/pyarrow-0.10.0.tar.gz
Requirement already satisfied: numpy>=1.10 in /usr/local/lib/python3.7/site-packages (from pyarrow) (1.15.0)
Requirement already satisfied: six>=1.0.0 in /usr/local/lib/python3.7/site-packages (from pyarrow) (1.11.0)
Building wheels for collected packages: pyarrow
Running setup.py bdist_wheel for pyarrow ... error
Complete output from command /usr/local/opt/python/bin/python3.7 -u -c "import setuptools, tokenize;file='/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" bdist_wheel -d /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-wheel-1hurj29j --python-tag cp37:
running bdist_wheel
running build
running build_py
creating build
creating build/lib.macosx-10.13-x86_64-3.7
....
....
running build_ext
creating build/temp.macosx-10.13-x86_64-3.7
-- Runnning cmake for pyarrow
cmake -DPYTHON_EXECUTABLE=/usr/local/opt/python/bin/python3.7 -DPYARROW_BOOST_USE_SHARED=on -DCMAKE_BUILD_TYPE=release /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow
-- The C compiler identification is AppleClang 9.1.0.9020039
-- The CXX compiler identification is AppleClang 9.1.0.9020039
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
INFOCompiler command: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
INFOCompiler version: Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

INFOCompiler id: Clang
Selected compiler clang 4.0.0svn
-- Performing Test CXX_SUPPORTS_SSE3
-- Performing Test CXX_SUPPORTS_SSE3 - Success
-- Performing Test CXX_SUPPORTS_ALTIVEC
-- Performing Test CXX_SUPPORTS_ALTIVEC - Success
Configured for RELEASE build (set with cmake -DCMAKE_BUILD_TYPE={release,debug,...})
-- Build Type: RELEASE
-- Build output directory: /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/release
-- Found PythonInterp: /usr/local/opt/python/bin/python3.7 (found version "3.7")
-- Found PythonLibs: /usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/libpython3.7m.dylib
-- Found NumPy: version "1.15.0" /usr/local/lib/python3.7/site-packages/numpy/core/include
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2")
-- Checking for module 'arrow'
-- Found arrow, version 0.11.0-SNAPSHOT
-- Arrow SO and ABI version: 11
-- Arrow full SO version: 11.0.0
-- Found the Arrow core library: /usr/local/lib/libarrow.dylib
-- Found the Arrow Python library: /usr/local/lib/libarrow_python.dylib
Added shared library dependency arrow: /usr/local/lib/libarrow.dylib
Added shared library dependency arrow_python: /usr/local/lib/libarrow_python.dylib
-- Configuring done
-- Generating done
-- Build files have been written to: /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7
-- Finished cmake for pyarrow
-- Running cmake --build for pyarrow
cmake --build . --config release --
Scanning dependencies of target lib_pyx
[ 33%] Compiling Cython CXX source for lib...
[ 33%] Built target lib_pyx
Scanning dependencies of target lib
[ 66%] Building CXX object CMakeFiles/lib.dir/lib.cpp.o
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:34854:60: error: no matching function for call to 'ConvertPySequence'
__pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 26, __pyx_L6_error)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: no known conversion from 'arrow::MemoryPool ' to 'PyObject ' (aka '_object ') for 2nd argument
Status ConvertPySequence(PyObject
obj, PyObject
mask,
^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 4 were provided
Status ConvertPySequence(PyObject
obj, const PyConversionOptions& options,
^
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:34926:60: error: no matching function for call to 'ConvertPySequence'
__pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_c_size, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 32, __pyx_L9_error)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: requires 4 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, PyObject* mask,
^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, const PyConversionOptions& options,
^
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:35001:60: error: no matching function for call to 'ConvertPySequence'
__pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_type->sp_type, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 40, __pyx_L13_error)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: requires 4 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, PyObject* mask,
^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, const PyConversionOptions& options,
^
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:35073:60: error: no matching function for call to 'ConvertPySequence'
__pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_c_size, __pyx_v_type->sp_type, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 48, __pyx_L16_error)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: requires 4 arguments, but 6 were provided
Status ConvertPySequence(PyObject* obj, PyObject* mask,
^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 6 were provided
Status ConvertPySequence(PyObject* obj, const PyConversionOptions& options,
^
4 errors generated.
make[2]: *** [CMakeFiles/lib.dir/lib.cpp.o] Error 1
make[1]: *** [CMakeFiles/lib.dir/all] Error 2
make: *** [all] Error 2
error: command 'cmake' failed with exit status 2


Failed building wheel for pyarrow
Running setup.py clean for pyarrow
Failed to build pyarrow
Installing collected packages: pyarrow
Running setup.py install for pyarrow ... error
Complete output from command /usr/local/opt/python/bin/python3.7 -u -c "import setuptools, tokenize;file='/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-record-7m129y7b/install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
creating build
......
running build_ext
creating build/temp.macosx-10.13-x86_64-3.7
-- Runnning cmake for pyarrow
cmake -DPYTHON_EXECUTABLE=/usr/local/opt/python/bin/python3.7 -DPYARROW_BOOST_USE_SHARED=on -DCMAKE_BUILD_TYPE=release /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow
-- The C compiler identification is AppleClang 9.1.0.9020039
-- The CXX compiler identification is AppleClang 9.1.0.9020039
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
INFOCompiler command: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
INFOCompiler version: Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

INFOCompiler id: Clang
Selected compiler clang 4.0.0svn
-- Performing Test CXX_SUPPORTS_SSE3
-- Performing Test CXX_SUPPORTS_SSE3 - Success
-- Performing Test CXX_SUPPORTS_ALTIVEC
-- Performing Test CXX_SUPPORTS_ALTIVEC - Success
Configured for RELEASE build (set with cmake -DCMAKE_BUILD_TYPE={release,debug,...})
-- Build Type: RELEASE
-- Build output directory: /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/release
-- Found PythonInterp: /usr/local/opt/python/bin/python3.7 (found version "3.7")
-- Found PythonLibs: /usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/libpython3.7m.dylib
-- Found NumPy: version "1.15.0" /usr/local/lib/python3.7/site-packages/numpy/core/include
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2")
-- Checking for module 'arrow'
--   Found arrow, version 0.11.0-SNAPSHOT
-- Arrow SO and ABI version: 11
-- Arrow full SO version: 11.0.0
-- Found the Arrow core library: /usr/local/lib/libarrow.dylib
-- Found the Arrow Python library: /usr/local/lib/libarrow_python.dylib
Added shared library dependency arrow: /usr/local/lib/libarrow.dylib
Added shared library dependency arrow_python: /usr/local/lib/libarrow_python.dylib
-- Configuring done
-- Generating done
-- Build files have been written to: /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7
-- Finished cmake for pyarrow
-- Running cmake --build for pyarrow
cmake --build . --config release --
Scanning dependencies of target lib_pyx
[ 33%] Compiling Cython CXX source for lib...
[ 33%] Built target lib_pyx
Scanning dependencies of target lib
[ 66%] Building CXX object CMakeFiles/lib.dir/lib.cpp.o
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:34854:60: error: no matching function for call to 'ConvertPySequence'
            __pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 26, __pyx_L6_error)
                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: no known conversion from 'arrow::MemoryPool *' to 'PyObject *' (aka '_object *') for 2nd argument
Status ConvertPySequence(PyObject* obj, PyObject* mask,
       ^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 4 were provided
Status ConvertPySequence(PyObject* obj, const PyConversionOptions& options,
       ^
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:34926:60: error: no matching function for call to 'ConvertPySequence'
            __pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_c_size, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 32, __pyx_L9_error)
                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: requires 4 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, PyObject* mask,
       ^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, const PyConversionOptions& options,
       ^
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:35001:60: error: no matching function for call to 'ConvertPySequence'
            __pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_type->sp_type, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 40, __pyx_L13_error)
                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: requires 4 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, PyObject* mask,
       ^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 5 were provided
Status ConvertPySequence(PyObject* obj, const PyConversionOptions& options,
       ^
/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/build/temp.macosx-10.13-x86_64-3.7/lib.cpp:35073:60: error: no matching function for call to 'ConvertPySequence'
            __pyx_t_3 = __pyx_f_7pyarrow_3lib_check_status(arrow::py::ConvertPySequence(__pyx_v_sequence, __pyx_v_c_size, __pyx_v_type->sp_type, __pyx_v_pool, __pyx_v_from_pandas, (&__pyx_v_out))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(2, 48, __pyx_L16_error)
                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/arrow/python/python_to_arrow.h:72:8: note: candidate function not viable: requires 4 arguments, but 6 were provided
Status ConvertPySequence(PyObject* obj, PyObject* mask,
       ^
/usr/local/include/arrow/python/python_to_arrow.h:77:8: note: candidate function not viable: requires 3 arguments, but 6 were provided
Status ConvertPySequence(PyObject* obj, const PyConversionOptions& options,
       ^
4 errors generated.
make[2]: *** [CMakeFiles/lib.dir/lib.cpp.o] Error 1
make[1]: *** [CMakeFiles/lib.dir/all] Error 2
make: *** [all] Error 2
error: command 'cmake' failed with exit status 2

----------------------------------------

Command "/usr/local/opt/python/bin/python3.7 -u -c "import setuptools, tokenize;file='/private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-record-7m129y7b/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/yy/wvq3f61531s70xcq2fyzh7mc0000gn/T/pip-install-24lpih95/pyarrow/`

@xhochy
Copy link
Member

xhochy commented Aug 21, 2018

You should probably add a warning on "https://arrow.apache.org/install/" saying that you currently cannot install with pip. The current text is misleading in that it tells me that it should work. I tried compiling/installing arrow/cpp from source (OSX / python 3.7) and then installing pyarrow==0.10.* with pip and it still did not work.

It does work for Python<3.7. For Python 3.7, you need to have installed the Arrow C++ packages via different means.

@xhochy
Copy link
Member

xhochy commented Aug 21, 2018

Locking this as the discussions here go into various directions and should continue as separate issues on https://issues.apache.org/jira/projects/ARROW

@apache apache locked and limited conversation to collaborators Aug 21, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants