-
Notifications
You must be signed in to change notification settings - Fork 3.3k
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
Update cgat-apps to 0.7.4 #51682
Update cgat-apps to 0.7.4 #51682
Changes from all commits
ac98d40
e8176cf
00af705
2ac1e17
e621b9c
7121c1a
4faeabe
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,327 @@ | ||
diff --git a/requires.txt b/requires.txt | ||
deleted file mode 100644 | ||
index e69de29b..00000000 | ||
diff --git a/setup.py b/setup.py | ||
index 1cc415ea..56d2ccd8 100644 | ||
--- a/setup.py | ||
+++ b/setup.py | ||
@@ -4,239 +4,73 @@ import os | ||
import subprocess | ||
import re | ||
|
||
-######################################################################## | ||
-####################################################################### | ||
-# Check for dependencies | ||
-# | ||
-# Is there a way to do this more elegantly? | ||
-# 1. Run "pip install numpy" | ||
-# 2. Wrap inside functions (works for numpy/pysam, but not cython) | ||
-try: | ||
- import numpy | ||
-except ImportError: | ||
- raise ImportError( | ||
- "the CGAT code collection requires numpy to be installed " | ||
- "before running setup.py (pip install numpy)") | ||
+# Import setuptools at the beginning | ||
+import setuptools | ||
+from setuptools import setup, find_packages, Extension | ||
+from distutils.version import LooseVersion | ||
+from Cython.Distutils import build_ext | ||
|
||
+# Ensure dependencies are installed before setup | ||
try: | ||
+ import numpy | ||
import Cython | ||
-except ImportError: | ||
- raise ImportError( | ||
- "the CGAT code collection requires cython to " | ||
- "be installed before running setup.py (pip install cython)") | ||
- | ||
-try: | ||
import pysam | ||
-except ImportError: | ||
- raise ImportError( | ||
- "the CGAT code collection requires pysam to " | ||
- "be installed before running setup.py (pip install pysam)") | ||
+except ImportError as e: | ||
+ missing_package = str(e).split("'")[1] | ||
+ raise ImportError(f"{missing_package} must be installed before running setup.py") | ||
|
||
-######################################################################## | ||
-######################################################################## | ||
-# Import setuptools | ||
-# Use existing setuptools, otherwise try ez_setup. | ||
-try: | ||
- import setuptools | ||
-except ImportError: | ||
- # try to get via ez_setup | ||
- # ez_setup did not work on all machines tested as | ||
- # it uses curl with https protocol, which is not | ||
- # enabled in ScientificLinux | ||
- import ez_setup | ||
- ez_setup.use_setuptools() | ||
+# Enforce Python 3 requirement | ||
+if sys.version_info < (3, 6): | ||
+ raise SystemExit("Python 3.6 or later is required to install this package.") | ||
|
||
-from setuptools import setup, find_packages, Extension | ||
- | ||
-from distutils.version import LooseVersion | ||
+# Minimum setuptools version requirement | ||
if LooseVersion(setuptools.__version__) < LooseVersion('1.1'): | ||
- print("Version detected:", LooseVersion(setuptools.__version__)) | ||
- raise ImportError( | ||
- "the CGAT code collection requires setuptools 1.1 higher") | ||
+ raise ImportError("Setuptools version >=1.1 is required") | ||
|
||
-from Cython.Distutils import build_ext | ||
- | ||
-######################################################################## | ||
-######################################################################## | ||
-IS_OSX = sys.platform == 'darwin' | ||
- | ||
-######################################################################## | ||
-######################################################################## | ||
-# collect CGAT version | ||
+# Define version and other package information | ||
sys.path.insert(0, "cgat") | ||
import version | ||
- | ||
version = version.__version__ | ||
|
||
-############################################################### | ||
-############################################################### | ||
-# Check for external dependencies | ||
-# | ||
-# Not exhaustive, simply execute a representative tool from a toolkit. | ||
-external_dependencies = ( | ||
- ("wigToBigWig", "UCSC tools", 255), | ||
- ("bedtools", "bedtools", 0), | ||
- ) | ||
+IS_OSX = sys.platform == 'darwin' | ||
|
||
+# External dependency check | ||
+external_dependencies = [("wigToBigWig", "UCSC tools", 255), ("bedtools", "bedtools", 0)] | ||
for tool, toolkit, expected in external_dependencies: | ||
- try: | ||
- # py3k | ||
- from subprocess import DEVNULL | ||
- except ImportError: | ||
- DEVNULL = open(os.devnull, 'wb') | ||
- | ||
- try: | ||
- retcode = subprocess.call(tool, shell=True, | ||
- stdout=DEVNULL, stderr=DEVNULL) | ||
- except OSError as msg: | ||
- print(("WARNING: depency check for %s failed: %s" % (toolkit, msg))) | ||
- | ||
- # UCSC tools return 255 when called without arguments | ||
+ retcode = subprocess.call(tool, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) | ||
if retcode != expected: | ||
- print(("WARNING: depency check for %s(%s) failed, error %i" % | ||
- (toolkit, tool, retcode))) | ||
- | ||
-############################################################### | ||
-############################################################### | ||
-# Define dependencies | ||
-# | ||
-major, minor1, minor2, s, tmp = sys.version_info | ||
- | ||
-if (major == 2 and minor1 < 7) or major < 2: | ||
- raise SystemExit("""CGAT requires Python 2.7 or later.""") | ||
- | ||
- | ||
-##################################################################### | ||
-##################################################################### | ||
-# Code to install dependencies from a repository | ||
-##################################################################### | ||
-# Modified from http://stackoverflow.com/a/9125399 | ||
-##################################################################### | ||
-def which(program): | ||
- """ | ||
- Detect whether or not a program is installed. | ||
- Thanks to http://stackoverflow.com/a/377028/70191 | ||
- """ | ||
- def is_exe(fpath): | ||
- return os.path.exists(fpath) and os.access(fpath, os.X_OK) | ||
- | ||
- fpath, _ = os.path.split(program) | ||
- if fpath: | ||
- if is_exe(program): | ||
- return program | ||
- else: | ||
- for path in os.environ['PATH'].split(os.pathsep): | ||
- exe_file = os.path.join(path, program) | ||
- if is_exe(exe_file): | ||
- return exe_file | ||
- | ||
- return None | ||
- | ||
-REPO_REQUIREMENT = re.compile( | ||
- r'^-e (?P<link>(?P<vcs>git|svn|hg|bzr).+#egg=(?P<package>.+)-(?P<version>\d(?:\.\d)*))$') | ||
-HTTPS_REQUIREMENT = re.compile( | ||
- r'^-e (?P<link>.*).+#(?P<package>.+)-(?P<version>\d(?:\.\d)*)$') | ||
-install_requires = [] | ||
-dependency_links = [] | ||
- | ||
-for requirement in ( | ||
- l.strip() for l in open('requires.txt') if not l.startswith("#")): | ||
- match = REPO_REQUIREMENT.match(requirement) | ||
- if match: | ||
- assert which(match.group('vcs')) is not None, \ | ||
- ("VCS '%(vcs)s' must be installed in order to " | ||
- "install %(link)s" % match.groupdict()) | ||
- install_requires.append("%(package)s==%(version)s" % match.groupdict()) | ||
- dependency_links.append(match.group('link')) | ||
- continue | ||
+ print(f"WARNING: Dependency check for {toolkit} ({tool}) failed with error code {retcode}") | ||
|
||
- if requirement.startswith("https"): | ||
- install_requires.append(requirement) | ||
- continue | ||
|
||
- match = HTTPS_REQUIREMENT.match(requirement) | ||
- if match: | ||
- install_requires.append("%(package)s>=%(version)s" % match.groupdict()) | ||
- dependency_links.append(match.group('link')) | ||
- continue | ||
- | ||
- install_requires.append(requirement) | ||
- | ||
-if major == 2: | ||
- install_requires.extend(['web.py>=0.37', | ||
- 'xlwt>=0.7.4', | ||
- 'matplotlib-venn>=0.5']) | ||
-elif major == 3: | ||
- pass | ||
- | ||
-cgat_packages = find_packages(exclude=['tests']) | ||
+# Adjust packages and directories | ||
+cgat_packages = find_packages(include=["cgat", "cgat.*"], exclude=['tests']) | ||
cgat_package_dirs = {'cgat': 'cgat'} | ||
|
||
-########################################################## | ||
-########################################################## | ||
-# classifiers | ||
-classifiers = """ | ||
-Development Status :: 3 - Alpha | ||
-Intended Audience :: Science/Research | ||
-Intended Audience :: Developers | ||
-License :: OSI Approved | ||
-Programming Language :: Python | ||
-Topic :: Software Development | ||
-Topic :: Scientific/Engineering | ||
-Operating System :: POSIX | ||
-Operating System :: Unix | ||
-Operating System :: MacOS | ||
-""" | ||
- | ||
-########################################################## | ||
-# Cython Extensions | ||
+# Cython extensions and paths | ||
conda_includes = [os.path.dirname(sysconfig.get_paths()["include"])] | ||
conda_libdirs = [os.path.dirname(sysconfig.get_paths()["stdlib"])] | ||
- | ||
-# Connected components cython extension | ||
pysam_libraries = pysam.get_libraries() | ||
-pysam_libdirs = list(set(os.path.dirname(x) for x in | ||
- pysam_libraries)) + conda_libdirs | ||
- | ||
-# remove lib and .so and add htslib | ||
-pysam_libs = ["hts"] + list([os.path.basename(x)[3:-3] for x in | ||
- pysam_libraries]) | ||
- | ||
+pysam_libdirs = list(set(os.path.dirname(x) for x in pysam_libraries)) + conda_libdirs | ||
+pysam_libs = ["hts"] + [os.path.basename(x)[3:-3] for x in pysam_libraries] | ||
pysam_dirname = os.path.dirname(pysam.__file__) | ||
-if IS_OSX: | ||
- # linking against bundles does no work (and apparently is not needed) | ||
- # within OS X | ||
- extra_link_args = [] | ||
-else: | ||
- extra_link_args = [os.path.join(pysam_dirname, x) for x in | ||
- pysam.get_libraries()] | ||
- | ||
-extra_link_args_pysam = ['-Wl,-rpath,{}'.format(x) for x in pysam_libdirs] +\ | ||
- ['-Wl,-rpath,{}'.format(x) for x in conda_libdirs] | ||
+extra_link_args_pysam = [f'-Wl,-rpath,{x}' for x in pysam_libdirs + conda_libdirs] | ||
|
||
extensions = [ | ||
Extension( | ||
'cgat.Components', | ||
- ['cgat/Components/Components.pyx', | ||
- 'cgat/Components/connected_components.cpp', ], | ||
- library_dirs=[], | ||
- libraries=[], | ||
+ ['cgat/Components/Components.pyx', 'cgat/Components/connected_components.cpp'], | ||
+ include_dirs=[os.path.join('cgat', 'Components')] + conda_includes, | ||
language="c++", | ||
), | ||
Extension( | ||
"cgat.NCL.cnestedlist", | ||
- ["cgat/NCL/cnestedlist.pyx", | ||
- "cgat/NCL/intervaldb.c"], | ||
- library_dirs=[], | ||
- libraries=[], | ||
+ ["cgat/NCL/cnestedlist.pyx", "cgat/NCL/intervaldb.c"], | ||
language="c", | ||
), | ||
Extension( | ||
"cgat.GeneModelAnalysis", | ||
["cgat/GeneModelAnalysis.pyx"], | ||
include_dirs=conda_includes + pysam.get_include() + [numpy.get_include()], | ||
- library_dirs=[], | ||
- libraries=[], | ||
define_macros=pysam.get_defines(), | ||
language="c", | ||
), | ||
@@ -292,11 +126,8 @@ extensions = [ | ||
), | ||
] | ||
|
||
-for e in extensions: | ||
- e.cython_directives = {'language_level': "3str"} #all are Python-3 | ||
- | ||
+# Build setup configuration | ||
setup( | ||
- # package information | ||
name='cgat', | ||
version=version, | ||
description='cgat : the Computational Genomics Analysis Toolkit', | ||
@@ -306,22 +137,26 @@ setup( | ||
platforms=["any"], | ||
keywords="computational genomics", | ||
long_description='cgat : the Computational Genomics Analysis Toolkit', | ||
- classifiers=[_f for _f in classifiers.split("\n") if _f], | ||
+ classifiers=[_f for _f in """ | ||
+ Development Status :: 3 - Alpha | ||
+ Intended Audience :: Science/Research | ||
+ Intended Audience :: Developers | ||
+ License :: OSI Approved | ||
+ Programming Language :: Python | ||
+ Topic :: Software Development | ||
+ Topic :: Scientific/Engineering | ||
+ Operating System :: POSIX | ||
+ Operating System :: Unix | ||
+ Operating System :: MacOS | ||
+ """.splitlines() if _f], | ||
url="http://www.cgat.org/cgat/Tools/", | ||
- # package contents | ||
+ python_requires=">=3.6", | ||
packages=cgat_packages, | ||
Comment on lines
+288
to
+311
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Specify 'install_requires' to ensure dependencies are installed The Add the setup(
name='cgat',
version=version,
description='cgat : the Computational Genomics Analysis Toolkit',
...
python_requires=">=3.6",
+ install_requires=[
+ 'numpy',
+ 'Cython>=0.29.35',
+ 'pysam',
+ # Add other dependencies as needed
+ ],
packages=cgat_packages,
package_dir=cgat_package_dirs,
include_package_data=True,
)
|
||
package_dir=cgat_package_dirs, | ||
include_package_data=True, | ||
- entry_points={ | ||
- 'console_scripts': ['cgat = cgat.cgat:main'] | ||
- }, | ||
- # dependencies | ||
- install_requires=install_requires, | ||
- dependency_links=dependency_links, | ||
- # extension modules | ||
+ entry_points={'console_scripts': ['cgat = cgat.cgat:main']}, | ||
ext_modules=extensions, | ||
cmdclass={'build_ext': build_ext}, | ||
- # other options | ||
zip_safe=False, | ||
test_suite="tests", | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,16 @@ | ||
#!/bin/bash | ||
|
||
# export compiler flags | ||
#export CFLAGS=${CFLAGS}" -I${PREFIX}/include -L${PREFIX}/lib" | ||
#export CPPFLAGS=${CPPFLAGS}" -I${PREFIX}/include -L${PREFIX}/lib" | ||
export LDFLAGS=${LDFLAGS}" -I${PREFIX}/include -L${PREFIX}/lib" | ||
export CPATH=${CPATH}" -I${PREFIX}/include -L${PREFIX}/lib" | ||
export C_INCLUDE_PATH=${C_INCLUDE_PATH}:${PREFIX}/include | ||
export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:${PREFIX}/include | ||
export LIBRARY_PATH=${LIBRARY_PATH}:${PREFIX}/lib | ||
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PREFIX}/lib:${PREFIX}/lib/R/lib | ||
|
||
# linking htslib, see: | ||
# http://pysam.readthedocs.org/en/latest/installation.html#external | ||
# https://github.com/pysam-developers/pysam/blob/v0.9.0/setup.py#L79 | ||
#export CFLAGS="-I$PREFIX/include -DHAVE_LIBDEFLATE" | ||
#export CPPFLAGS="-I$PREFIX/include -DHAVE_LIBDEFLATE" | ||
#export LDFLAGS="-L$PREFIX/lib" | ||
|
||
#export HTSLIB_LIBRARY_DIR=$PREFIX/lib | ||
#export HTSLIB_INCLUDE_DIR=$PREFIX/include | ||
export INCLUDE_PATH="${PREFIX}/include" | ||
export LIBRARY_PATH="${PREFIX}/lib" | ||
export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib" | ||
export CFLAGS="${CFLAGS} -O3 -L${PREFIX}/lib" | ||
export CPPFLAGS="${CPPFLAGS} -O3 -I${PREFIX}/include" | ||
|
||
# remove install_requires (no longer required with conda package) | ||
sed -i'' -e '/REPO_REQUIREMENT/,/pass/d' setup.py | ||
sed -i'' -e '/# dependencies/,/dependency_links=dependency_links,/d' setup.py | ||
sed -i.bak'' -e '/REPO_REQUIREMENT/,/pass/d' setup.py | ||
sed -i.bak'' -e '/# dependencies/,/dependency_links=dependency_links,/d' setup.py | ||
rm -rf *.bak | ||
|
||
# https://bioconda.github.io/linting.html#setup-py-install-args | ||
$PYTHON setup.py install --single-version-externally-managed --record=record.txt | ||
$PYTHON -m pip install . --no-deps --no-build-isolation --no-cache-dir -vvv |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add missing import statement for 'pysam'
The
pysam
module is used in the code (e.g.,pysam.get_libraries()
at line 226), but it is not imported. This will result in aNameError
when runningsetup.py
.Apply this diff to add the missing import at the beginning of the file:
+import pysam