GithubHelp home page GithubHelp logo

conda-forge / pytables-feedstock Goto Github PK

View Code? Open in Web Editor NEW
1.0 8.0 25.0 240 KB

A conda-smithy repository for pytables.

License: BSD 3-Clause "New" or "Revised" License

Shell 30.57% Python 39.74% Batchfile 29.69%

pytables-feedstock's Introduction

About pytables-feedstock

Feedstock license: BSD-3-Clause

Home: http://www.pytables.org

Package license: BSD-3-Clause

Summary: Brings together Python, HDF5 and NumPy to easily handle large amounts of data.

Development: https://github.com/PyTables

Documentation: http://www.pytables.org/

PyTables is a package for managing hierarchical datasets and designed to efficiently and easily cope with extremely large amounts of data. PyTables is built on top of the HDF5 library, using the Python language and the NumPy package.

Current build status

Azure
VariantStatus
linux_64_numpy1.22python3.10.____cpython variant
linux_64_numpy1.22python3.9.____73_pypy variant
linux_64_numpy1.22python3.9.____cpython variant
linux_64_numpy1.23python3.11.____cpython variant
linux_64_numpy1.26python3.12.____cpython variant
linux_aarch64_numpy1.22python3.10.____cpython variant
linux_aarch64_numpy1.22python3.9.____73_pypy variant
linux_aarch64_numpy1.22python3.9.____cpython variant
linux_aarch64_numpy1.23python3.11.____cpython variant
linux_aarch64_numpy1.26python3.12.____cpython variant
linux_ppc64le_numpy1.22python3.10.____cpython variant
linux_ppc64le_numpy1.22python3.9.____73_pypy variant
linux_ppc64le_numpy1.22python3.9.____cpython variant
linux_ppc64le_numpy1.23python3.11.____cpython variant
linux_ppc64le_numpy1.26python3.12.____cpython variant
osx_64_numpy1.22python3.10.____cpython variant
osx_64_numpy1.22python3.9.____73_pypy variant
osx_64_numpy1.22python3.9.____cpython variant
osx_64_numpy1.23python3.11.____cpython variant
osx_64_numpy1.26python3.12.____cpython variant
osx_arm64_numpy1.22python3.10.____cpython variant
osx_arm64_numpy1.22python3.9.____cpython variant
osx_arm64_numpy1.23python3.11.____cpython variant
osx_arm64_numpy1.26python3.12.____cpython variant
win_64_numpy1.22python3.10.____cpython variant
win_64_numpy1.22python3.9.____73_pypy variant
win_64_numpy1.22python3.9.____cpython variant
win_64_numpy1.23python3.11.____cpython variant
win_64_numpy1.26python3.12.____cpython variant

Current release info

Name Downloads Version Platforms
Conda Recipe Conda Downloads Conda Version Conda Platforms

Installing pytables

Installing pytables from the conda-forge channel can be achieved by adding conda-forge to your channels with:

conda config --add channels conda-forge
conda config --set channel_priority strict

Once the conda-forge channel has been enabled, pytables can be installed with conda:

conda install pytables

or with mamba:

mamba install pytables

It is possible to list all of the versions of pytables available on your platform with conda:

conda search pytables --channel conda-forge

or with mamba:

mamba search pytables --channel conda-forge

Alternatively, mamba repoquery may provide more information:

# Search all versions available on your platform:
mamba repoquery search pytables --channel conda-forge

# List packages depending on `pytables`:
mamba repoquery whoneeds pytables --channel conda-forge

# List dependencies of `pytables`:
mamba repoquery depends pytables --channel conda-forge

About conda-forge

Powered by NumFOCUS

conda-forge is a community-led conda channel of installable packages. In order to provide high-quality builds, the process has been automated into the conda-forge GitHub organization. The conda-forge organization contains one repository for each of the installable packages. Such a repository is known as a feedstock.

A feedstock is made up of a conda recipe (the instructions on what and how to build the package) and the necessary configurations for automatic building using freely available continuous integration services. Thanks to the awesome service provided by Azure, GitHub, CircleCI, AppVeyor, Drone, and TravisCI it is possible to build and upload installable packages to the conda-forge anaconda.org channel for Linux, Windows and OSX respectively.

To manage the continuous integration and simplify feedstock maintenance conda-smithy has been developed. Using the conda-forge.yml within this repository, it is possible to re-render all of this feedstock's supporting files (e.g. the CI configuration files) with conda smithy rerender.

For more information please check the conda-forge documentation.

Terminology

feedstock - the conda recipe (raw material), supporting scripts and CI configuration.

conda-smithy - the tool which helps orchestrate the feedstock. Its primary use is in the construction of the CI .yml files and simplify the management of many feedstocks.

conda-forge - the place where the feedstock and smithy live and work to produce the finished article (built conda distributions)

Updating pytables-feedstock

If you would like to improve the pytables recipe or build a new package version, please fork this repository and submit a PR. Upon submission, your changes will be run on the appropriate platforms to give the reviewer an opportunity to confirm that the changes result in a successful build. Once merged, the recipe will be re-built and uploaded automatically to the conda-forge channel, whereupon the built conda packages will be available for everybody to install and use from the conda-forge channel. Note that all branches in the conda-forge/pytables-feedstock are immediately built and any created packages are uploaded, so PRs should be based on branches in forks and branches in the main repository should only be used to build distinct package versions.

In order to produce a uniquely identifiable distribution:

  • If the version of a package is not being increased, please add or increase the build/number.
  • If the version of a package is being increased, please remember to return the build/number back to 0.

Feedstock Maintainers

pytables-feedstock's People

Contributors

apmorton avatar avalentino avatar beckermr avatar bgruening avatar chrisburr avatar conda-forge-admin avatar conda-forge-curator[bot] avatar conda-forge-webservices[bot] avatar djsutherland avatar duncanmmacleod avatar ericr86 avatar erykoff avatar github-actions[bot] avatar hmaarrfk avatar jakirkham avatar jan-janssen avatar jreback avatar jsancho-gpl avatar marscher avatar mbargull avatar ocefpaf avatar qwhelan avatar regro-cf-autotick-bot avatar scopatz avatar tomkooij avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pytables-feedstock's Issues

ImportError: DLL load faild (windows only)

The current packages (build 8), or at least the 64bit windows 3.4.3-py_36_8 package is broken.

This is probably due to the recently merged #30

This switches from the internal blosc to external blosc (conda package) to prevent zlib import errors.

(py3) C:\Users\Tom>conda create -n test python=3.6 pytables -c conda-forge
Fetching package metadata .............
Solving package specifications: .

Package plan for installation in environment C:\Users\Tom\Miniconda3\envs\test:

The following NEW packages will be INSTALLED:

    blosc:          1.7.0-vc14_2
    bzip2:          1.0.6-vc14_1     conda-forge [vc14]
    certifi:        2018.4.16-py36_0 conda-forge
    hdf5:           1.10.1-vc14_2    conda-forge [vc14]
    mkl:            2017.0.3-0
    numexpr:        2.6.4-py36_1     conda-forge
    numpy:          1.13.1-py36_0
    pip:            9.0.3-py36_0     conda-forge
    pytables:       3.4.3-py36_8     conda-forge
    python:         3.6.5-1          conda-forge
    setuptools:     39.1.0-py36_0    conda-forge
    six:            1.11.0-py36_1    conda-forge
    vc:             14-0             conda-forge
    vs2015_runtime: 14.0.25420-0     conda-forge
    wheel:          0.31.0-py36_0    conda-forge
    wincertstore:   0.2-py36_0       conda-forge
    zlib:           1.2.11-vc14_0    conda-forge [vc14]

Proceed ([y]/n)? y

mkl-2017.0.3-0 100% |###############################| Time: 0:00:12  10.98 MB/s
vs2015_runtime 100% |###############################| Time: 0:00:01   1.59 MB/s
python-3.6.5-1 100% |###############################| Time: 0:00:05   3.84 MB/s
vc-14-0.tar.bz 100% |###############################| Time: 0:00:00  63.04 kB/s
certifi-2018.4 100% |###############################| Time: 0:00:00   9.36 MB/s
numpy-1.13.1-p 100% |###############################| Time: 0:00:00  11.02 MB/s
six-1.11.0-py3 100% |###############################| Time: 0:00:00   1.38 MB/s
wincertstore-0 100% |###############################| Time: 0:00:00 744.27 kB/s
setuptools-39. 100% |###############################| Time: 0:00:00   3.72 MB/s
numexpr-2.6.4- 100% |###############################| Time: 0:00:00 193.14 kB/s
wheel-0.31.0-p 100% |###############################| Time: 0:00:00 753.62 kB/s
pip-9.0.3-py36 100% |###############################| Time: 0:00:01   1.81 MB/s
#
# To activate this environment, use:
# > activate test
#
# To deactivate this environment, use:
# > deactivate test
#
# * for power-users using bash, you must source
#


(py3) C:\Users\Tom>activate test

(test) C:\Users\Tom>python
Python 3.6.5 | packaged by conda-forge | (default, Apr  6 2018, 16:13:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tables
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Tom\Miniconda3\envs\test\lib\site-packages\tables\__init__.py", line 93, in <module>
    from .utilsextension import (
ImportError: DLL load failed: Kan opgegeven module niet vinden.

Pytables recipe may segfault when using pip cache

Issue:
The conda Pytables recipe reliably segfaults on hdf5 1.10.2 when the Pytables wheel from pip is currently cached. This seems to be same reproducable issue found on Issue #686 on the PyTables github and explained in more detail in Issue #29.

The environment below can be reproduced with the following command:

$ conda create -n tablestest pytables hdf5=1.10.2

In the environment I run the following python script which causes a segfault:

#!/usr/bin/env python
from tables import utilsextension
import zlib

zlib.decompress(zlib.compress(b'foo'))

The issue was supposed to be resolved by having Pytables built against the conda packaged blosc to avoid having utilsextension using it's own defined versions of zlib (in this particular case).

Currently in build.sh the pip install command does not ignore the cache which is referenced outside of the current conda environment. I believe a simple --no-cache-dir would fix this issue by forcing Pytables to build against blosc regardless of potential existing PyTables wheel (where blosc is not necessarily built against).

I haven't investigated the exact cause of why specifically the hdf5 update causes the issue but I can confirm that the zlib symbols from utilsextension are being used (when using a cached Pytables wheel) instead of the system ones which would be expected if built against blosc (and seems to avoid a segfault).

The stacktrace from the core dump:

Program terminated with signal 11, Segmentation fault.
#0  0x00007f6ec699abec in bi_flush ()
   from /scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables
/../../.././libz.so.1
Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64
(gdb) where
#0  0x00007f6ec699abec in bi_flush ()
   from /scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables
/../../.././libz.so.1
#1  0x00007f6ec6999788 in _tr_flush_bits ()
   from /scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables
/../../.././libz.so.1
#2  0x00007f6ec698cf15 in flush_pending ()
   from /scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables
/../../.././libz.so.1
#3  0x00007f6ec698d0d4 in deflate ()
   from /scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables
/../../.././libz.so.1
#4  0x00007f6ec4721a00 in zlib_compress_impl (module=0x1f35bf0,
    data=0x7ffe10f2ace0, data=0x7ffe10f2ace0, level=<optimized out>)
   from /scratch/miniconda2/envs/tablestest4/lib/python3.6/lib-dynload/zlib.cpy

From LD_DEBUG=all output and when looking up the deflate symbol from zlib here is where it binds the lookup to utilsextension.so

symbol=deflate;  lookup in file=python [0]
symbol=deflate;  lookup in file=/scratch/miniconda2/envs/tablestest4/bin/../lib/libpython3.6m.so.1.0 [0]
symbol=deflate;  lookup in file=/lib64/libpthread.so.0 [0]
symbol=deflate;  lookup in file=/lib64/libdl.so.2 [0]
symbol=deflate;  lookup in file=/lib64/libutil.so.1 [0]
symbol=deflate;  lookup in file=/lib64/librt.so.1 [0]
symbol=deflate;  lookup in file=/lib64/libm.so.6 [0]
symbol=deflate;  lookup in file=/lib64/libc.so.6 [0]
symbol=deflate;  lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
symbol=deflate;  lookup in file=/scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables/utilsextension.cpython-36m-x86_64-linux-gnu.so [0]
binding file /scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables/../../.././libz.so.1 [0] to /scratch/miniconda2/envs/tablestest4/lib/python3.6/site-packages/tables/utilsextension.cpython-36m-x86_64-linux-gnu.so [0]: normal symbol `deflate'

Environment (conda list):
$ conda list
# packages in environment at /scratch/miniconda2/envs/tablestest4:
#
# Name                    Version                   Build  Channel
blas                      1.0                         mkl
blosc                     1.15.1               hfc679d8_0    conda-forge
bzip2                     1.0.6                h470a237_2    conda-forge
ca-certificates           2018.11.29           ha4d7672_0    conda-forge
certifi                   2018.11.29            py36_1000    conda-forge
hdf5                      1.10.2               hc401514_3    conda-forge
intel-openmp              2019.1                      144
libffi                    3.2.1                hfc679d8_5    conda-forge
libgcc-ng                 7.2.0                hdf63c60_3    conda-forge
libgfortran               3.0.0                         1    conda-forge
libgfortran-ng            7.2.0                hdf63c60_3    conda-forge
libstdcxx-ng              7.2.0                hdf63c60_3    conda-forge
lzo                       2.10                 h470a237_0    conda-forge
mkl                       2018.0.3                      1
mkl_fft                   1.0.10                   py36_0    conda-forge
mkl_random                1.0.2                    py36_0    conda-forge
ncurses                   6.1                  hfc679d8_2    conda-forge
numexpr                   2.6.8            py36hf8a1672_0    conda-forge
numpy                     1.15.0           py36h1b885b7_0
numpy-base                1.15.0           py36h3dfced4_0
openssl                   1.0.2p               h470a237_1    conda-forge
pip                       18.1                  py36_1000    conda-forge
pytables                  3.4.4            py36h4f72b40_1    conda-forge
python                    3.6.7                h5001a0f_1    conda-forge
readline                  7.0                  haf1bffa_1    conda-forge
setuptools                40.6.2                   py36_0    conda-forge
six                       1.12.0                py36_1000    conda-forge
sqlite                    3.26.0               hb1c47c0_0    conda-forge
tk                        8.6.9                ha92aebf_0    conda-forge
wheel                     0.32.3                   py36_0    conda-forge
xz                        5.2.4                h470a237_1    conda-forge
zlib                      1.2.11               h470a237_3    conda-forge

Details about conda and system ( conda info ):
$ conda info
     active environment : tablestest4
    active env location : /scratch/miniconda2/envs/tablestest4
            shell level : 1
       user config file : /users/eroberts/.condarc
 populated config files : /users/eroberts/.condarc
          conda version : 4.5.11
    conda-build version : 3.10.6
         python version : 2.7.15.final.0
       base environment : /scratch/miniconda2  (writable)
           channel URLs : https://conda.anaconda.org/bioconda/linux-64
                          https://conda.anaconda.org/bioconda/noarch
                          https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://conda.anaconda.org/default/linux-64
                          https://conda.anaconda.org/default/noarch
                          https://repo.anaconda.com/pkgs/main/linux-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/free/linux-64
                          https://repo.anaconda.com/pkgs/free/noarch
                          https://repo.anaconda.com/pkgs/r/linux-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/pro/linux-64
                          https://repo.anaconda.com/pkgs/pro/noarch
          package cache : /scratch/miniconda2/pkgs
                          /users/eroberts/.conda/pkgs
       envs directories : /scratch/miniconda2/envs
                          /users/eroberts/.conda/envs
               platform : linux-64
             user-agent : conda/4.5.11 requests/2.13.0 CPython/2.7.15 Linux/3.1
0.0-862.2.3.el7.x86_64 centos/7 glibc/2.17
                UID:GID : 18659:9365
             netrc file : None
           offline mode : False

te

Issue:


Environment (conda list):
$ conda list


Details about conda and system ( conda info ):
$ conda info

Missing requirement pinning on c-blosc2, import fails with c-blosc2 2.14

Solution to issue cannot be found in the documentation.

  • I checked the documentation.

Issue

With recent versions of this package, creating a fresh environment and then trying to import pytables fails with:

ImportError                               Traceback (most recent call last)
Cell In[95], line 1
----> 1 import tables

File [~/.local/conda/envs/smd/lib/python3.12/site-packages/tables/__init__.py:44](http://localhost:8888/home/mnoethe/.local/conda/envs/smd/lib/python3.12/site-packages/tables/__init__.py#line=43)
     40     raise RuntimeError("Blosc2 library not found. "
     41                        f"I looked for \"{', '.join(blosc2_search_paths)}\"")
     43 # Necessary imports to get versions stored on the cython extension
---> 44 from .utilsextension import get_hdf5_version as _get_hdf5_version
     46 from ._version import __version__
     48 hdf5_version = _get_hdf5_version()

ImportError: libblosc2.so.2: cannot open shared object file: No such file or directory

which is fixed by downgrading c-blosc2 to 2.13

cblosc-2 2.14 comes with a libblosc2.so.3

Installed packages

This works:

# Name                    Version                   Build  Channel
c-blosc2                  2.13.2               hb4ffafa_0    conda-forge
pytables                  3.9.2           py312h5531bb7_1    conda-forge```

This doesn't:

# Name                    Version                   Build  Channel
c-blosc2                  2.14.4               hb4ffafa_0    conda-forge
pytables                  3.9.2           py312h5531bb7_1    conda-forge```

Environment info

active environment : smd
    active env location : /home/mnoethe/.local/conda/envs/smd
            shell level : 1
       user config file : /home/mnoethe/.condarc
 populated config files : /home/mnoethe/.local/conda/.condarc
          conda version : 23.10.0
    conda-build version : 3.27.0
         python version : 3.11.6.final.0
       virtual packages : __archspec=1=skylake
                          __glibc=2.35=0
                          __linux=5.14.0=0
                          __unix=0=0
       base environment : /home/mnoethe/.local/conda  (writable)
      conda av data dir : /home/mnoethe/.local/conda/etc/conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : /home/mnoethe/.local/conda/pkgs
                          /home/mnoethe/.conda/pkgs
       envs directories : /home/mnoethe/.local/conda/envs
                          /home/mnoethe/.conda/envs
               platform : linux-64
             user-agent : conda/23.10.0 requests/2.31.0 CPython/3.11.6 Linux/5.14.0-1051-oem ubuntu/22.04.4 glibc/2.35 solver/libmamba conda-libmamba-solver/23.11.1 libmambapy/1.5.3
                UID:GID : 5074:5002
             netrc file : None
           offline mode : False

lzo GPL dynamic linking

Issue:

While pytables appears to be licensed under BSD-3c, it dynamically links lzo (on linux) which is GPL2. Natively this appears to violate the GPL, is there any information if pytables has some sort of special dispensation?

ldd _comp_lzo.cpython-39-x86_64-linux-gnu.so
	liblzo2.so.2 => /opt/conda/envs/testtables/lib/python3.9/site-packages/tables/./../../../liblzo2.so.2 (0x00007f7799c41000)

no-arch packages are breaking downstream

looks like #18 is now creating no-arch packages, which I don't think works. recipe needs to revert 'numpy x.x'

xref pandas-dev/pandas#17757

                            3.4.2               np112py27_1  conda-forge     
                             3.4.2               np112py35_1  conda-forge     
                             3.4.2               np112py36_1  conda-forge     
                             3.4.2               np113py27_1  conda-forge     
                             3.4.2               np113py35_1  conda-forge     
                             3.4.2               np113py36_1  conda-forge     
                             3.4.2                    py27_2  conda-forge     
                             3.4.2                    py35_2  conda-forge     
                             3.4.2                    py36_2  conda-forge     

Python 3 or 2 dynamic load zlib segfault

I believe this is related to Issue #27.
Since I've have discovered the underlying reason I also believe this is related to:
PyTables/PyTables#644
ContinuumIO/anaconda-issues#7315

From a conda --create tablestest python=2 pytables I can faithfully reproduce a segmentation fault with the following python snippet:

from tables import utilsextension
import zlib

comp = zlib.compress("foobar")
decomp = zlib.decompress(comp)

print(comp)

For Python 3 you need to replace the string obj with a bytes literal.

This segfaults consistently. If you remove the PyTables import, the segfault no longer exists. When looking at the backtrace from the core dump, only two symbols showed up from libz.so where the segfault happened (the rest of the backtrace was CPython), putShortMSB and more importantly deflate.

I took a look at the LD_DEBUG information to compare the results with and without the initial import. The relevant results from the segfaulting example:

file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/utilsextension.so [0];  dynamically loaded by /scratch/miniconda2/envs/tablestest/bin/../lib/libpython2.7.so.1.0 [0]
file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/utilsextension.so [0];  generating link map
  dynamic: 0x00007f12b3e96620  base: 0x00007f12b3b7a000   size: 0x0000000000324fd8
    entry: 0x00007f12b3b96660  phdr: 0x00007f12b3b7a040  phnum:                  6


file=libhdf5.so.101 [0];  needed by /scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/utilsextension.so [0]
find library=libhdf5.so.101 [0]; searching
 search path=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../tls/x86_64:/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../tls:/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../x86_64:/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../..		(RPATH from file /scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/utilsextension.so)
  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../tls/x86_64/libhdf5.so.101
  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../tls/libhdf5.so.101
  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../x86_64/libhdf5.so.101
  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../libhdf5.so.101

file=libhdf5.so.101 [0];  generating link map
  dynamic: 0x00007f12b3b6cb88  base: 0x00007f12b35c5000   size: 0x00000000005b4ac8
    entry: 0x00007f12b3609870  phdr: 0x00007f12b35c5040  phnum:                  6

...

file=libz.so.1 [0];  needed by /scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../libhdf5.so.101 [0]
find library=libz.so.1 [0]; searching
 search path=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../.		(RPATH from file /scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../../libhdf5.so.101)
  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../.././libz.so.1

file=libz.so.1 [0];  generating link map
  dynamic: 0x00007f12b2ea2178  base: 0x00007f12b2c86000   size: 0x000000000021c520
    entry: 0x00007f12b2c88400  phdr: 0x00007f12b2c86040  phnum:                  6

...

relocation processing: /scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../libz.so.1
...
symbol=deflate;  lookup in file=python [0]
symbol=deflate;  lookup in file=/scratch/miniconda2/envs/tablestest/bin/../lib/libpython2.7.so.1.0 [0]
symbol=deflate;  lookup in file=/lib64/libpthread.so.0 [0]
symbol=deflate;  lookup in file=/lib64/libdl.so.2 [0]
symbol=deflate;  lookup in file=/lib64/libutil.so.1 [0]
symbol=deflate;  lookup in file=/lib64/libm.so.6 [0]
symbol=deflate;  lookup in file=/lib64/libc.so.6 [0]
symbol=deflate;  lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
symbol=deflate;  lookup in file=/scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/utilsextension.so [0]
binding file /scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/../../.././libz.so.1 [0] to /scratch/miniconda2/envs/tablestest/lib/python2.7/site-packages/tables/utilsextension.so [0]: normal symbol `deflate'

The most relevant findings from the LD_DEBUG results is that since utilsextension.so is dynmically loaded first, libz.so is loaded as a dependency. As a result, when it comes to symbol relocation processing, the symbols are first searched in utilsextension.so before libz.so.
It turns that utilsextension.so has deflate as a symbol (upon inspection through nm) and apparently a lot of other symbols defined by zlib. I'm guessing zlib is compiled into utilsextension.so? Either way, this deflate symbol is not what Python is expecting when called through the zlib module and it segfaults. If you run ldd on the builtin Python module zlib.so, it depends on the environment's libz.so and so would like to use the symbols there.

As a comparison this is what happens when I omit the initial PyTables import:

	find library=libz.so.1 [0]; searching
/scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../..		(RPATH from file /scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/zlib.so)
	  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../tls/x86_64/libz.so.1
	  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../tls/libz.so.1
	  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../x86_64/libz.so.1
	  trying file=/scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../libz.so.1
	
	calling init: /scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../libz.so.1

...

symbol=deflate;  lookup in file=python [0]
symbol=deflate;  lookup in file=/scratch/miniconda2/envs/tablestest/bin/../lib/libpython2.7.so.1.0 [0]
symbol=deflate;  lookup in file=/lib64/libpthread.so.0 [0]
symbol=deflate;  lookup in file=/lib64/libdl.so.2 [0]
symbol=deflate;  lookup in file=/lib64/libutil.so.1 [0]
symbol=deflate;  lookup in file=/lib64/libm.so.6 [0]
symbol=deflate;  lookup in file=/lib64/libc.so.6 [0]
symbol=deflate;  lookup in file=/lib64/ld-linux-x86-64.so.2 [0]
symbol=deflate;  lookup in file=/scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/zlib.so [0]
symbol=deflate;  lookup in file=/scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../libz.so.1 [0]
binding file /scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../libz.so.1 [0] to /scratch/miniconda2/envs/tablestest/lib/python2.7/lib-dynload/../../libz.so.1 [0]: normal symbol `deflate'

As you can see libz.so uses it's own deflate symbol, as Python likes, and nothing bad happens.

It looks like utilsextension.so has zlib statically compiled in, and is dynmically dependent on hdf5.so. The hdf5.so is dynmically dependent on libz.so and so this odd symbol dependency problem exists. In fact, when I run nm on any built shared objects distributed with PyTables, they all contain zlib symbols builtin (likely from c-blosc).

Is it possible to remove the zlib symbols from utilsextension.so et. al and just dynamically load it in?

From the older issues, I believe the segfault happens because of the older symbols utilsextension.so has builtin to it and hence why the common solution of pining zlib to and older version seems to help. It was probably the last zlib library .so binary compatible with the version built into utilsextension.so.

EDIT: Noting that c-blosc has the zlib pinned at "1.2.8". I'd wager that's why the environment has to have the same version.

EDIT: Simplified python example and improved findings.

Python 3.5 builds are no longer being updated

Issue:

PyTables conda builds are no longer being built for Python 3.5. They still have older build bugs (relating to not using blosc and segfaulting). I found the change in commit dbd14143. Travis no longer provides conda builds for Python 3.5 as also evidence on the anaconda package list.

I'm not sure why this particular build was dropped or the rational. It would be great to figure out why this happened. If there's no future support planned for Python 3.5 on conda it would be great to know as well.

Thanks!

Unable to pass pip-check when depending on pytables

Solution to issue cannot be found in the documentation.

  • I checked the documentation.

Issue

I have a repository with pytables in its dependency tree, and I just recently started getting the following error on my pip check CI step:

tables 3.9.2 requires blosc2, which is not installed.

Poking around here, I saw that in the 3.9.2 merged branch, you also had to disable pip checking because of the dynamic treatment of the blosc dependency. It looks like this solution is also requiring all downstream repositories leaning on the conda installation of pytables to also forgo pip-checking or face the same fate...

I made a super bare bones example repo here that is just an empty python package depending on pytables and running pip-check. The test fails here with exactly the error message quoted above.

Installed packages

From my github CI log:


Looking for: ['pytables=3.9.2']

Transaction

  Prefix: /home/runner/miniconda3/envs/my-env

  Updating specs:

   - pytables=3.9.2

  Package                Version  Build                Channel                   Size
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  Install:
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

  + blosc                 1.21.5  h0f2a231_0           conda-forge/linux-64      49kB
  + c-ares                1.23.0  hd590300_0           conda-forge/linux-64     154kB
  + c-blosc2              2.11.3  hb4ffafa_0           conda-forge/linux-64     333kB
  + hdf5                  1.14.2  nompi_h4f84152_100   conda-forge/linux-64       4MB
  + keyutils               1.6.1  h166bdaf_0           conda-forge/linux-64     118kB
  + krb5                  1.21.2  h659d440_0           conda-forge/linux-64       1MB
  + libaec                 1.1.2  h59595ed_1           conda-forge/linux-64      35kB
  + libblas                3.9.0  20_linux64_openblas  conda-forge/linux-64      14kB
  + libcblas               3.9.0  20_linux64_openblas  conda-forge/linux-64      14kB
  + libcurl                8.4.0  hca28451_0           conda-forge/linux-64     386kB
  + libedit         3.1.20191231  he28a2e2_2           conda-forge/linux-64     124kB
  + libev                   4.33  h516909a_1           conda-forge/linux-64     106kB
  + libgfortran-ng        13.2.0  h69a702a_3           conda-forge/linux-64      24kB
  + libgfortran5          13.2.0  ha4646dd_3           conda-forge/linux-64       1MB
  + liblapack              3.9.0  20_linux64_openblas  conda-forge/linux-64      14kB
  + libnghttp2            1.58.0  h47da74e_0           conda-forge/linux-64     631kB
  + libopenblas           0.3.25  pthreads_h413a1c8_0  conda-forge/linux-64       6MB
  + libssh2               1.11.0  h0841786_0           conda-forge/linux-64     271kB
  + libstdcxx-ng          13.2.0  h7e041cc_3           conda-forge/linux-64       4MB
  + lz4-c                  1.9.4  hcb278e6_0           conda-forge/linux-64     143kB
  + lzo                     2.10  h516909a_1000        conda-forge/linux-64     321kB
  + nomkl                    1.0  h5ca1d4c_0           conda-forge/noarch         4kB
  + numexpr                2.8.7  py311h039bad6_104    conda-forge/linux-64     159kB
  + numpy                 1.26.2  py311h64a7726_0      conda-forge/linux-64       8MB
  + packaging               23.2  pyhd8ed1ab_0         conda-forge/noarch        49kB
  + py-cpuinfo             9.0.0  pyhd8ed1ab_0         conda-forge/noarch        25kB
  + pytables               3.9.2  py311h10c7f7f_0      conda-forge/linux-64       2MB
  + python_abi              3.11  4_cp311              conda-forge/linux-64       6kB
  + snappy                1.1.10  h9fff704_0           conda-forge/linux-64      39kB
  + zlib-ng                2.0.7  h0b41bf4_0           conda-forge/linux-64      95kB
  + zstd                   1.5.5  hfc55251_0           conda-forge/linux-64     545kB


### Environment info

```shell
My env file:


channels:
  - conda-forge
dependencies:
  - pytables =3.9.2

python 3.5.x segfault with zlib>=1.2.8

Python 3.5.4 | packaged by conda-forge | (default, Dec 18 2017, 06:30:33)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tables
>>> import matplotlib.pyplot as plt
Segmentation fault

Reported in:
ContinuumIO/anaconda-issues#7315
PyTables/PyTables#644

I can reproduce this on python=3.5 but not on python 3.6.

Solution is probably pin zlib to 1.2.8, but this might break hdf5. Will test with PR.

ImportError: Could not load hdf5.dll on python 3.8

Issue:
With a clean environment with python 3.8, hdf5 1.10.5 and pytables 3.6.1 on Windows I get "ImportError: Could not load any of ['hdf5.dll', 'hdf5dll.dll', 'pytables_hdf5.dll'], please ensure that it is installed in the package folder." when importing pytables.

Python 3.8.1 | packaged by conda-forge | (default, Jan  5 2020, 20:17:16) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tables
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Code\miniconda3\envs\pytables_test\lib\site-packages\tables\__init__.py", line 82, in <module>
    raise ImportError(
ImportError: Could not load any of ['hdf5.dll', 'hdf5dll.dll', 'pytables_hdf5.dll'], please ensure that it is installed in the package folder.

Environment (conda list):
$ conda list
# packages in environment at C:\Code\miniconda3\envs\pytables_test:
#
# Name                    Version                   Build  Channel
blosc                     1.17.0               h6538335_1    conda-forge
bzip2                     1.0.8                hfa6e2cd_2    conda-forge
ca-certificates           2019.11.28           hecc5488_0    conda-forge
certifi                   2019.11.28               py38_0    conda-forge
hdf5                      1.10.5          nompi_ha405e13_1104    conda-forge
intel-openmp              2019.4                      245
libblas                   3.8.0                    14_mkl    conda-forge
libcblas                  3.8.0                    14_mkl    conda-forge
liblapack                 3.8.0                    14_mkl    conda-forge
mkl                       2019.4                      245
mock                      3.0.5                    py38_0    conda-forge
numexpr                   2.7.1            py38h6538335_0    conda-forge
numpy                     1.17.3           py38hc71023c_0    conda-forge
openssl                   1.1.1d               hfa6e2cd_0    conda-forge
pip                       19.3.1                   py38_0    conda-forge
pytables                  3.6.1            py38h26f9782_0    conda-forge
python                    3.8.1                he1f5543_1    conda-forge
setuptools                45.0.0                   py38_1    conda-forge
six                       1.13.0                   py38_0    conda-forge
sqlite                    3.30.1               hfa6e2cd_0    conda-forge
vc                        14.1                 h0510ff6_4
vs2015_runtime            14.16.27012          hf0eaf9b_1
wheel                     0.33.6                   py38_0    conda-forge
wincertstore              0.2                   py38_1003    conda-forge
zlib                      1.2.11            h2fa13f4_1006    conda-forge


Details about conda and system ( conda info ):
$ conda info

     active environment : pytables_test
    active env location : C:\Code\miniconda3\envs\pytables_test
            shell level : 2
       user config file : C:\Users\aen\.condarc
 populated config files : C:\Users\aen\.condarc
          conda version : 4.8.0
    conda-build version : 3.18.11
         python version : 3.7.6.final.0
       virtual packages : __cuda=8.0
       base environment : C:\Code\miniconda3  (writable)
           channel URLs : https://conda.anaconda.org/conda-forge/win-64
                          https://conda.anaconda.org/conda-forge/noarch
                          https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : C:\Code\miniconda3\pkgs
                          C:\Users\aen\.conda\pkgs
                          C:\Users\aen\AppData\Local\conda\conda\pkgs
       envs directories : C:\Code\miniconda3\envs
                          C:\Users\aen\.conda\envs
                          C:\Users\aen\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/4.8.0 requests/2.22.0 CPython/3.7.6 Windows/10 Windows/10.0.16299
          administrator : False
             netrc file : None
           offline mode : False

hdf5 requirement in 3.7.0

It seems like I am not able to build the latest version of 3.7.0 from conda-forge with hdf5=1.10.5. Is there a reason why there is not an available compatible build that does not require upgrading hdf5 to 1.12.1? This does not seem like a requirement in the original pytables package.

Edit: Corrected hdf5 version that I am trying to install with.

Could not find a version that satisfies the requirement mock>=2.0

Issue:
I get the following error when installing a pkg that depends on pytables:

Could not find a version that satisfies the requirement mock>=2.0 (from tables->mypkg) (from versions: )
No matching distribution found for mock>=2.0 (from tables->mypkg)

All deps were installed via conda before running pip install mypkg. Pytables 3.5.1 was installed from conda forge.

The pytables meta.yaml does not call out mock as a run dep, but it seems that pytables does include that in it's requirements.txt that setup.py uses for install_requires:

https://github.com/PyTables/PyTables/blob/master/requirements.txt


Environment (conda list):
$ conda list
# packages in environment at /home/kyle/miniconda3/envs/myenv:
#
# Name                    Version                   Build  Channel
asn1crypto                0.24.0                   py37_0    https://repo.anaconda.com/pkgs/main
atomicwrites              1.3.0                      py_0    https://repo.anaconda.com/pkgs/main
attrs                     19.1.0                     py_0    https://repo.anaconda.com/pkgs/main
beautifulsoup4            4.7.1                    py37_1    https://repo.anaconda.com/pkgs/main
blas                      2.4                    openblas
blosc                     1.16.3               hf484d3e_0
bzip2                     1.0.6                h14c3975_5    https://repo.anaconda.com/pkgs/main
ca-certificates           2019.1.23                     0
certifi                   2019.3.9                 py37_0
cffi                      1.12.2           py37h2e261b9_1    https://repo.anaconda.com/pkgs/main
chardet                   3.0.4                    py37_1    https://repo.anaconda.com/pkgs/main
conda                     4.6.8                    py37_0    https://repo.anaconda.com/pkgs/main
conda-build               3.17.8                   py37_0    https://repo.anaconda.com/pkgs/main
cryptography              2.6.1            py37h1ba5d50_0    https://repo.anaconda.com/pkgs/main
dpkt                      1.9.2                      py_0
filelock                  3.0.10                   py37_0    https://repo.anaconda.com/pkgs/main
glob2                     0.6                      py37_1    https://repo.anaconda.com/pkgs/main
hdf5                      1.10.4               hb1b8bf9_0
icu                       58.2                 h9c2bf20_1    https://repo.anaconda.com/pkgs/main
idna                      2.8                      py37_0    https://repo.anaconda.com/pkgs/main
jinja2                    2.10                     py37_0    https://repo.anaconda.com/pkgs/main
libarchive                3.3.3                h5d8350f_5    https://repo.anaconda.com/pkgs/main
libblas                   3.8.0                4_openblas
libcblas                  3.8.0                4_openblas
libedit                   3.1.20181209         hc058e9b_0    https://repo.anaconda.com/pkgs/main
libffi                    3.2.1                hd88cf55_4    https://repo.anaconda.com/pkgs/main
libgcc-ng                 8.2.0                hdf63c60_1    https://repo.anaconda.com/pkgs/main
libgfortran-ng            7.3.0                hdf63c60_0
liblapack                 3.8.0                4_openblas
liblapacke                3.8.0                4_openblas
liblief                   0.9.0                h7725739_2    https://repo.anaconda.com/pkgs/main
libopenblas               0.3.3                h5a2b251_3
libstdcxx-ng              8.2.0                hdf63c60_1    https://repo.anaconda.com/pkgs/main
libxml2                   2.9.9                he19cac6_0    https://repo.anaconda.com/pkgs/main
lz4-c                     1.8.1.2              h14c3975_0    https://repo.anaconda.com/pkgs/main
lzo                       2.10                 h49e0be7_2    https://repo.anaconda.com/pkgs/main
markupsafe                1.1.1            py37h7b6447c_0    https://repo.anaconda.com/pkgs/main
more-itertools            6.0.0                    py37_0    https://repo.anaconda.com/pkgs/main
ncurses                   6.1                  he6710b0_1    https://repo.anaconda.com/pkgs/main
numexpr                   2.6.9            py37h2ffa06c_0
numpy                     1.16.2           py37h99e49ec_0
numpy-base                1.16.2           py37h2f8d375_0
openblas                  0.3.5             h9ac9557_1001
openssl                   1.1.1                h7b6447c_0
pandas                    0.24.2           py37he6710b0_0
patchelf                  0.9                  he6710b0_3    https://repo.anaconda.com/pkgs/main
pip                       19.0.3                   py37_0    https://repo.anaconda.com/pkgs/main
pkginfo                   1.5.0.1                  py37_0    https://repo.anaconda.com/pkgs/main
pluggy                    0.9.0                    py37_0    https://repo.anaconda.com/pkgs/main
psutil                    5.6.1            py37h7b6447c_0    https://repo.anaconda.com/pkgs/main
py                        1.8.0                    py37_0    https://repo.anaconda.com/pkgs/main
py-lief                   0.9.0            py37h7725739_2    https://repo.anaconda.com/pkgs/main
pycosat                   0.6.3            py37h14c3975_0    https://repo.anaconda.com/pkgs/main
pycparser                 2.19                     py37_0    https://repo.anaconda.com/pkgs/main
pyopenssl                 19.0.0                   py37_0    https://repo.anaconda.com/pkgs/main
pysocks                   1.6.8                    py37_0    https://repo.anaconda.com/pkgs/main
pytables                  3.5.1            py37h71ec239_0
pytest                    4.3.1                    py37_0    https://repo.anaconda.com/pkgs/main
python                    3.7.2                h0371630_0    https://repo.anaconda.com/pkgs/main
python-dateutil           2.8.0                    py37_0
python-libarchive-c       2.8                      py37_6    https://repo.anaconda.com/pkgs/main
pytz                      2018.9                   py37_0    https://repo.anaconda.com/pkgs/main
pyyaml                    5.1              py37h7b6447c_0    https://repo.anaconda.com/pkgs/main
readline                  7.0                  h7b6447c_5    https://repo.anaconda.com/pkgs/main
requests                  2.21.0                   py37_0    https://repo.anaconda.com/pkgs/main
ruamel_yaml               0.15.46          py37h14c3975_0    https://repo.anaconda.com/pkgs/main
setuptools                40.8.0                   py37_0    https://repo.anaconda.com/pkgs/main
six                       1.12.0                   py37_0    https://repo.anaconda.com/pkgs/main
soupsieve                 1.8                      py37_0    https://repo.anaconda.com/pkgs/main
sqlite                    3.27.2               h7b6447c_0    https://repo.anaconda.com/pkgs/main
tk                        8.6.8                hbc83047_0    https://repo.anaconda.com/pkgs/main
tqdm                      4.31.1                     py_0    https://repo.anaconda.com/pkgs/main
urllib3                   1.24.1                   py37_0    https://repo.anaconda.com/pkgs/main
wheel                     0.33.1                   py37_0    https://repo.anaconda.com/pkgs/main
xz                        5.2.4                h14c3975_4    https://repo.anaconda.com/pkgs/main
yaml                      0.1.7                had09818_2    https://repo.anaconda.com/pkgs/main
zlib                      1.2.11               h7b6447c_3    https://repo.anaconda.com/pkgs/main
zstd                      1.3.7                h0b5b093_0    https://repo.anaconda.com/pkgs/main

Details about conda and system ( conda info ):
$ conda info

     active environment : myenv
    active env location : /home/kyle/miniconda3/envs/myenv
            shell level : 2
       user config file : /home/kyle/.condarc
 populated config files : /home/kyle/.condarc
          conda version : 4.6.8
    conda-build version : 3.17.8
         python version : 3.7.1.final.0
       base environment : /home/kyle/miniconda3  (writable)
           channel URLs : (my local repos which mirror anaconda/main and conda-forge)
          package cache : /home/kyle/miniconda3/pkgs
                          /home/kyle/.conda/pkgs
       envs directories : /home/kyle/miniconda3/envs
                          /home/kyle/.conda/envs
               platform : linux-64
             user-agent : conda/4.6.8 requests/2.21.0 CPython/3.7.1 Linux/4.4.0-17134-Microsoft ubuntu/18.04.1 glibc/2.27
                UID:GID : 1000:1000
             netrc file : None
           offline mode : False

PyTables conda build does not include blosc and will segfault with newer hdf5/zlib

Issue:
Nearly identical to Issue #39. Blosc is not being built in with the recipe so the python extension utilsextension.so still has internal symbols for zlib which may cause a segfault using the same test case as posted in Issue #39. This can be verified by downloading the current package off the anaconda cloud and running nm on the utilsextension on the shared object:

   $ nm site-packages/tables/utilsextension.cpython-36m-x86_64-linux-gnu.so | rg deflate
   000000000006a010 T deflate
   0000000000069ec0 T deflateBound
   000000000006baa0 T deflateCopy
   0000000000103b60 R deflate_copyright
   000000000006b680 T deflateEnd
   0000000000068940 t deflate_fast
   000000000006ba70 T deflateInit_
   000000000006b770 T deflateInit2_
   000000000006b550 T deflateParams
   0000000000069d90 T deflatePending
   0000000000069dd0 T deflatePrime
   0000000000069c80 T deflateReset
   0000000000069bb0 T deflateResetKeep
   0000000000069970 T deflateSetDictionary
   0000000000069d60 T deflateSetHeader
   0000000000068ec0 t deflate_slow
   00000000000695e0 t deflate_stored
   0000000000069e80 T deflateTune
                   U H5Pset_deflate

The issue should be fixed by including blosc in the build requirements for the recipe.


Environment (conda list):
$ conda list
N/A

Details about conda and system ( conda info ):
N/A ``` $ conda info
</details>

LZO missing or not detected on 64-bit Windows when via conda-forge

Solution to issue cannot be found in the documentation.

  • I checked the documentation.

Issue

Installing pytables from Anaconda defaults (main) channel includes the lzo package and pytables finds LZO 2.10, but when installing from conda-forge (with mamba in Miniforge) the lzo package is not included. Adding the lzo 2.10 package separately still does not make pytables find it (or its DLL).

I found #70 with a proposal to stop including LZO but as the issue is still open, I doubt that it would have lead to changes causing my problem. The BSD 3-clause license applies to pytables both via the anaconda and conda-forge channels. The lzo package does exists in conda-forge so it seems to me that the problem is more about it not being listed as a dependency or not being found.

My main motivation for preferring conda-forge is that Anaconda's terms and conditions does not allow non-educational organizations to use the main channel for free (even if they are non-commercial research organizations outside USA), so I would hope there could be a binary package with lzo also in the community channel. I guess https://github.com/AnacondaRecipes/pytables-feedstock is what Anaconda defaults (main) use and since it is a fork of the conda-forge repository I was hoping a comparison would reveal why or how the difference arises. But without being familiar with packaging tools, I was not able to identify any interesting LZO-differences after a quick look.

If it would be concluded that there are licensing problems with the way LZO is included as a compiled DLL in the defaults/main channel, I'd like it to be documented somewhere that this difference exists for conda-forge. If this is the case, it would be a regression of ease of use and I would then open a separate issue for pytables documentation to offer more precise installation help (they discuss how to compile with LZO on Windows or to use a package and place (outdated version) lzo1.dll in a folder on the PATH -- and despite some hours of trying I so far had no success getting pytables from conda-forge to recognize lzo from conda-forge regardless of me placing the DLL in various paths).

Steps to reproduce

I used a fresh installation of Miniforge3-Windows-x86_64 on Windows 10. I was hoping that using Miniforge and mamba would automatically force the conda-forge channel but perhaps due to an old .condarc from an otherwise removed Anaconda installation, my first attempt inadvertently used the Anaconda defaults (main) channel. LZO in pytables works then, but when repeating to use conda-forge as I wanted LZO disappears. So I write steps to reproduce in this order. (Feel free to try whether simply using conda install -c defaults ... vs. conda install -c conda-forge ... reproduces the issue, I didn't check in that way yet.)

First, what worked with Anaconda's main repository:

  1. Ensure that mamba info or conda info shows channel URLs including "https://repo.anaconda.com/pkgs/main/", use conda config --add channels defaults if necessary.
  2. mamba create -n works "python=3.10"
  3. mamba activate works
  4. mamba install "pytables>=3.8" ipython
  5. ipython -c "import tables; tables.print_versions(); tables.filters.Filters(1, 'lzo')" This will list the LZO version and will create a filter with lzo as complib.
  6. Document by mamba list --explicit >works.txt
  7. Clean up by mamba deactivate and mamba uninstall -n works --all

Then what did not work, with conda-forge:

  1. conda config --add channels conda-forge and conda config --remove channels defaults and ensure that mamba info only lists URLs beginning with https://conda.anaconda.org/conda-forge/.
  2. mamba create -n issue "python=3.10"
  3. mamba activate issue
  4. mamba install "pytables>=3.8" ipython
  5. ipython -c "import tables; tables.print_versions(); tables.filters.Filters(1, 'lzo')" This did NOT show any LZO version and when trying to create the filter a warning a printed and you get zlib instead.
  6. Document by mamba list --explicit >missing.txt You will notice that the lzo packge was not even installed, so the dependencies must have been specified differently in conda-forge than in Anaconda defaults.
  7. mamba install lzo to make sure we have the lzo package and a lzo2.dll. I saved the result by mamba list --explicit >not_recognized.txt.
  8. Repeating step 5 still fails to find LZO. (I also tried to uninstall pytables and reinstall after lzo was installed, but still not working.)
  9. Optionally clean up by mamba deactivate and mamba uninstall -n issue --all

The resulting explicit lists of packages

works.txt
missing.txt (Also pasted in textbox.)
not_recognized.txt

Installed packages

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
@EXPLICIT
https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda
https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-4_cp310.conda
https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda
https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.36.32532-hdcecf7f_17.conda
https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda
https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.36.32532-h05e6639_17.conda
https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.2-h63175ca_1.conda
https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.43.2-hcfcfb64_0.conda
https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda
https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda
https://conda.anaconda.org/conda-forge/win-64/lzo-2.10-he774522_1000.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/openmp-5.0.0-vc14_1.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/openssl-3.1.3-hcfcfb64_0.conda
https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_0.conda
https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-hcfcfb64_0.conda
https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda
https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.2-heb0366b_0.conda
https://conda.anaconda.org/conda-forge/win-64/libflang-5.0.0-h6538335_20180525.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda
https://conda.anaconda.org/conda-forge/win-64/python-3.10.12-h4de0772_0_cpython.conda
https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.5-h12be248_0.conda
https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda
https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hdccc3a2_0.conda
https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.10.5-h183a6f4_0.conda
https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/win-64/libcurl-8.4.0-hd5e4a3a_0.conda
https://conda.anaconda.org/conda-forge/win-64/libopenblas-0.3.24-pthreads_hc140b1d_0.conda
https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/traitlets-5.11.2-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda
https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.2-nompi_h73e8ff5_100.conda
https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-18_win64_openblas.conda
https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2
https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-18_win64_openblas.conda
https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-18_win64_openblas.conda
https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.0-py310hf667824_0.conda
https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda
https://conda.anaconda.org/conda-forge/win-64/numexpr-2.8.7-py310h27d5182_103.conda
https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda
https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh5737063_0.conda
https://conda.anaconda.org/conda-forge/win-64/pytables-3.9.1-py310hde27e41_0.conda

Environment info

active environment : base
    active env location : C:\Users\REDACTED\miniforge3
            shell level : 1
       user config file : C:\Users\REDACTED\.condarc
 populated config files : C:\Users\REDACTED\miniforge3\.condarc
                          C:\Users\REDACTED\.condarc
          conda version : 23.3.1
    conda-build version : not installed
         python version : 3.10.12.final.0
       virtual packages : __archspec=1=x86_64
                          __win=0=0
       base environment : C:\Users\REDACTED\miniforge3  (writable)
      conda av data dir : C:\Users\REDACTED\miniforge3\etc\conda
  conda av metadata url : None
           channel URLs : https://conda.anaconda.org/conda-forge/win-64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : C:\Users\REDACTED\miniforge3\pkgs
                          C:\Users\REDACTED\.conda\pkgs
                          C:\Users\REDACTED\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\REDACTED\miniforge3\envs
                          C:\Users\REDACTED\.conda\envs
                          C:\Users\REDACTED\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/23.3.1 requests/2.31.0 CPython/3.10.12 Windows/10 Windows/10.0.19045
          administrator : False
             netrc file : None
           offline mode : Fals

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.