Commit 998ab970 authored by Laura Denies's avatar Laura Denies
Browse files

Merge branch 'SpringClean' into 'master'

Spring clean

See merge request !1
parents 1fe55556 99f1f93f
test/output_expected/** filter=lfs diff=lfs merge=lfs -text
#
.git/**
**/.snakemake/**
**/__pycache__/**
# log files
*.log
slurm-*.out
# tmp files
*.tmp
*.swp
tmp/**
# macOS Files
.DS_Store
# test data
test/output_test/**
[submodule "submodules/DeepVirFinder"]
path = submodules/DeepVirFinder
url = https://github.com/jessieren/DeepVirFinder.git
[submodule "submodules/deeparg-ss"]
path = submodules/deeparg-ss
url = https://gaarangoa@bitbucket.org/gusphdproj/deeparg-ss.git
# PathoFact 1.0
# PathoFact 1.0 (branch SpringClean)
PathoFact is an easy-to-use modular pipeline for the metagenomic analyses of toxins, virulence factors and antimicrobial resistance.
Additionally, PathoFact combines the prediction of these pathogenic factors with the identification of mobile genetic elements.
This provides further depth to the analysis by considering the localization of the genes on mobile genetic elements (MGEs), as well as on the chromosome.
Furthermore, each module (toxins, virulence factors, and antimicrobial resistance) of PathoFact is also a standalone component, making it a flexible and versatile tool.
# Requirements
# Requirements and installation
PathoFact requires a good working Python (3.6.4), snakemake (version 5.5.4) and (mini)conda installation.
If snakemake is not yet installed one could install this by using the provided conda file (snakemake.yaml)
To install run: conda env create -f snakemake.yaml
The main requirements are:
PathoFact provides the conda environments with the dependencies needed to run the incorporated tools.
Some of the tools itself, however, still need to be installed.
The following tools need to be installed by the user itself and the path to the tools adjusted within the config.yaml file:
* HMMER-3.2.1
* singalp-4.1
- `git` and `git lfs`
- `conda`
The following tools can either be installed manually or the set-up.sh script can be run to install automatically:
Most other dependencies are either included as a `git submodule` or will be installed automatically by `snakemake` using the `conda` YAML files in `envs/`.
However, some tools need to be installed and/or configured manually.
* deepARG (v1)
* PlasFlow (v1.1)
* VirSorter (v1.0.5)
* DeepVirFinder (v1.0)
## GIT and GIT LFS
It is recommended to install using the set-up.sh script.
If installed manually make sure that the tools are installed in the folder "scripts" and the pathways matches those within the config.yaml
After the installation of deepARG make sure to manually adjust the configurations.
*TODO*
For this go to the directory where the program was saved (in this case the scripts/deeparg-ss directory within the PathoFact directroy) and open the files options.py.
Replace the path '/home/gustavo1/tmp/deeparg-ss/'; with the current directory (deepARG path).
Finally for LINUX system to allow diamond to be executed go to ./bin within the deeparg-ss directory and run:
chmod +x diamond
For more explanations on the deepArg configuration see the deepArg documentation: https://bitbucket.org/gusphdproj/deeparg-ss/src/master/
## Miniconda (conda)
# Usage
```bash
# install miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod u+x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh # follow the instructions
```
##Input configuration
The input to the ViruTox pipeline consists of; (i) an amino acid fasta file of translated gene sequences for the prediction of toxins, virulence factors and antimicrobial resistance genes, (ii) a fasta file containing nucleotide sequences of the corresponding contigs for the prediction of MGEs, and (iii) a tab delimited table consisting of a first column of contig names with the corresponding gene names in the second column to combine predictions.
Contig and gene names need to correlate with the original names given in the fasta headers. Furhtermore, make sure that no white spaces are present in the fasta headers.
All three input files used by the pipeline for one sample need to be given the same sample name, followed by the suffix .faa (amino acid, gene fasta file), .fna (nucleotide contig fasta file), .contig (table with contig and gene names).
## Pipeline environment
## Run PathoFact
To run PathoFact the sample name is given in the config.yaml file at "input_file". If wanted more than one sample can be run at the simultanously, for example:
```bash
# create the conda environment
conda env create -f=envs/PathoFact.yaml
```
You can activate and deactivate the environment using `conda activate PathoFact` and `conda deactivate`, respectively.
## PathoFact
Clone the repository and its sub-modules:
```bash
# activate git lfs
git lfs install
# clone branch incl. sub-modules
git clone -b SpringClean --recursive https://git-r3lab.uni.lu/laura.denies/PathoFact.git
```
Perform futher installation/configuration steps:
```bash
# run set-up script
./set-up.sh
```
## Dependency: `SignalP`
* input_file: ["SAMPLE_A","SAMPLE_B"]
Required version: `4.1`
In "OUTDIR" the pathway to the samples are given and the PathoFact results are deposited in the same directory.
To download the tool you need to submit a request at https://services.healthtech.dtu.dk/:
* input_file: /path/to/samples
- Look for "SignalP" and click on the link
- Click on "Downloads"
- Click on the link for your platform for the version "Version 4.1g"
- Fill and submit the form
In "project" an unique name for your project need to be given, for example:
After the installation, adjust the path for this tool in `config.yaml` (keyword `signalp`).
# Usage
## Input files
Each sample should have three input files:
- `*.fna`: FASTA file containing nucleotide sequences of the contigs
- no whitespaces in FASTA headers
- for prediction of mobile genetic elements
- `*.faa`: FASTA file conatining translated gene sequences, i.e. amino acid sequences
- no whitespaces in FASTA headers
- for prediction of toxins, virulence factors and antimicrobial resistance genes
- `*.contig`: TAB-delimited file containing a mapping from contig ID (1st column) to gene ID (2nd column)
- no header, one gene ID per line
- contig and gene IDs should be the same as in the FASTA files
The files should be located in the same directory.
For each sample, the corresponding input files should have the same basename, e.g. `SAMPLE_A.fna`, `SAMPLE_A.fna` and `SAMPLE_A.contig` for sample `SAMPLE_A`.
## Run PathoFact
* project: Project_A_PathoFact
### Configuration
Pathofact as default will run the complete pipeline for the prediction of virulence factors, toxins and antimicrobial resistance genes.
If it is desired to run only part of the pipeline this can be indicated **within** the "Snakefile" by changing "w" to a different option:
To run PathoFact you need to adjust some parameters in `config.yaml`.
* w = 'complete' (run complete pipeline, default setting)
* w = 'Tox' (run only workflow for Toxin prediction)
* w = 'Vir' (run only workflow for Virulence prediction)
* w = 'AMR' (run only workflow for Antimicrobial resistance and mobile genetic element prediction)
- `input_file`: This is a list of sample names, e.g. `input_file: ["SAMPLE_A","SAMPLE_B"]`
- `project`: A unique project name which will be used as the name of the output directory in `OUTDIR` path (see below).
- `OUTDIR`: Path to directory containing the sample data; the output directory will be created there.
- `workflow`: Pathofact can run the complete pipeline (default) or a specific step:
- "complete": complete pipeline = toxin + virulence + AMR + MGE prediction
- "Tox": toxin prediction
- "Vir": virulence prediction
- "AMR": antimicrobial resistance (AMR) & mobile genetic elements (MGEs) prediction
To run the snakemake pipeline and example script is given (run_PathoFact.sh), but the following is the basics to run the pipeline:
### Execution
* snakemake -s Snakefile --use-conda -p
alternatively one can adjust the number of threads per job (when analysing bigger files it is advised to run on either multiple "cores" or cores with "higher" memory)
Basic command to run the pipeline using `<cores>` CPUs:
* snakemake -s Snakefile -j [number of threads/jobs] --use-conda -p
```bash
# activate the env
conda activate PathoFact
# run the pipeline
# set <cores> to the number of cores to use, e.g. 10
snakemake -s Snakefile --use-conda --reason --cores <cores> -p
```
**NOTE**: Add parameter `-n` (or `--dry-run`) to the command to see which steps will be executed without running them.
**NOTE**: Add `--configfile <configfile.yaml>` to use a different config file than `config.yaml`.
**NOTE**: It is advised to run the pipeline using multiple CPUs or CPUs with "higher" memory.
For more options, see the [snakemake documentation](https://snakemake.readthedocs.io/en/stable/index.html).
#Snakefile
w = 'complete'
if w is 'complete':
include:
"workflows/Combine_PathoFact_workflow"
rule all:
input:
expand(["{OUTDIR}/{project}/AMR/{input_file}_AMR_MGE_prediction_detailed.tsv",
"{OUTDIR}/{project}/Toxin_gene_library_{input_file}_report.tsv",
"{OUTDIR}/{project}/PathoFact_{input_file}_predictions.csv"],
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"])
elif w is 'Tox':
include:
"workflows/Toxin_workflow"
rule all:
input:
expand(["{OUTDIR}/{project}/Toxin_prediction_{input_file}_report.csv",
"{OUTDIR}/{project}/Toxin_gene_library_{input_file}_report.tsv"],
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"])
elif w is 'Vir':
include:
"workflows/Virulence_workflow"
rule all:
input:
expand("{OUTDIR}/{project}/Virulence_prediction_{input_file}_report.csv",
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"])
elif w is 'AMR':
include:
"workflows/AMR_workflow"
rule all:
input:
expand(["{OUTDIR}/{project}/AMR_MGE_prediction_{input_file}_report.tsv",
"{OUTDIR}/{project}/AMR/{input_file}_AMR_MGE_prediction_detailed.tsv"],
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"])
# can be overwritten by using --configfile <config file> when calling snakemake
configfile: "config.yaml"
if config["workflow"] == "complete":
include:
"workflows/Combine_PathoFact_workflow.smk"
rule all:
input:
expand(
[
"{OUTDIR}/{project}/AMR/{input_file}_AMR_MGE_prediction_detailed.tsv",
"{OUTDIR}/{project}/Toxin_gene_library_{input_file}_report.tsv",
"{OUTDIR}/{project}/PathoFact_{input_file}_predictions.csv"
],
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"]
)
elif config["workflow"] == "Tox":
include:
"workflows/Toxin_workflow.smk"
rule all:
input:
expand(
[
"{OUTDIR}/{project}/Toxin_prediction_{input_file}_report.csv",
"{OUTDIR}/{project}/Toxin_gene_library_{input_file}_report.tsv"
],
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"]
)
elif config["workflow"] == "Vir":
include:
"workflows/Virulence_workflow.smk"
rule all:
input:
expand(
"{OUTDIR}/{project}/Virulence_prediction_{input_file}_report.csv",
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"]
)
elif config["workflow"] == "AMR":
include:
"workflows/AMR_workflow.smk"
rule all:
input:
expand(
[
"{OUTDIR}/{project}/AMR_MGE_prediction_{input_file}_report.tsv",
"{OUTDIR}/{project}/AMR/{input_file}_AMR_MGE_prediction_detailed.tsv"
],
OUTDIR=config["OUTDIR"], project=config["project"], input_file=config["input_file"]
)
else:
raise Exception('NO workflow selected')
raise Exception("Unknown workflow option: %s" % config["workflow"])
name: Plasmid
channels:
- jjhelmus
- bioconda/label/cf201901
- conda-forge
- bioconda
- defaults
dependencies:
- _libgcc_mutex=0.1=main
- _r-mutex=1.0.1=anacondar_1
- absl-py=0.5.0=py_0
- astor=0.7.1=py_0
- bioconductor-biocgenerics=0.26.0=r341_0
- bioconductor-biostrings=2.48.0=r341h470a237_0
- bioconductor-iranges=2.14.12=r341h470a237_0
- bioconductor-s4vectors=0.18.3=r341h470a237_0
- bioconductor-xvector=0.20.0=r341h470a237_0
- bioconductor-zlibbioc=1.26.0=r341h470a237_0
- biopython=1.72=py35_0
- blas=2.12=openblas
- bzip2=1.0.8=h516909a_0
- c-ares=1.15.0=h516909a_1001
- ca-certificates=2019.6.16=hecc5488_0
- cairo=1.14.12=h80bd089_1005
- certifi=2018.8.24=py35_1001
- curl=7.61.0=h93b3f91_2
- fontconfig=2.13.1=he4413a7_1000
- freetype=2.10.0=he983fc9_1
- gast=0.2.2=py_0
- gettext=0.19.8.1=hc5be6a0_1002
- glib=2.56.2=had28632_1001
- graphite2=1.3.13=hf484d3e_1000
- grpcio=1.14.1=py35hd60e7a3_0
- gsl=2.2.1=h0c605f7_3
- harfbuzz=1.9.0=he243708_1001
- icu=58.2=hf484d3e_1000
- jpeg=9c=h14c3975_1001
- krb5=1.14.6=0
- libblas=3.8.0=12_openblas
- libcblas=3.8.0=12_openblas
- libffi=3.2.1=he1b5a44_1006
- libgcc=7.2.0=h69d50b8_2
- libgcc-ng=9.1.0=hdf63c60_0
- libgfortran=3.0.0=1
- libgfortran-ng=7.3.0=hdf63c60_0
- libiconv=1.15=h516909a_1005
- liblapack=3.8.0=12_openblas
- liblapacke=3.8.0=12_openblas
- libopenblas=0.3.7=h6e990d7_1
- libpng=1.6.37=hed695b0_0
- libprotobuf=3.6.0=hdbcaa40_1000
- libssh2=1.8.0=h1ad7b7a_1003
- libstdcxx-ng=9.1.0=hdf63c60_0
- libtiff=4.0.10=h57b8799_1003
- libuuid=2.32.1=h14c3975_1000
- libxcb=1.13=h14c3975_1002
- libxml2=2.9.9=h13577e0_2
- lz4-c=1.8.3=he1b5a44_1001
- markdown=3.1.1=py_0
- mock=2.0.0=py35_0
- ncurses=6.1=hf484d3e_1002
- numpy=1.15.2=py35h99e49ec_0
- numpy-base=1.15.2=py35h2f8d375_0
- openssl=1.0.2r=h14c3975_0
- pandas=0.23.4=py35hf8a1672_0
- pango=1.40.14=hf0c64fd_1003
- pbr=5.4.2=py_0
- pcre=8.41=hf484d3e_1003
- perl=5.26.2=h516909a_1006
- perl-bioperl=1.6.924=4
- perl-getopt-long=2.50=pl526_1
- perl-threaded=5.26.0=0
- perl-yaml=1.29=pl526_0
- pip=18.0=py35_1001
- pixman=0.34.0=h14c3975_1003
- protobuf=3.0.0b2=py35_1
- pthread-stubs=0.4=h14c3975_1001
- python=3.5.5=h5001a0f_2
- python-dateutil=2.8.0=py_0
- pytz=2019.2=py_0
- r-base=3.4.1=h4fe35fd_8
- readline=7.0=hf8c457e_1001
- rpy2=2.8.5=py35r3.4.1_0
- scikit-learn=0.20.0=py35h22eb022_1
- scipy=1.1.0=py35he2b7bc3_1
- setuptools=40.4.3=py35_0
- six=1.11.0=py35_1
- sqlite=3.28.0=h8b20d00_0
- tensorflow=0.10.0rc0=py35_1
- termcolor=1.1.0=py_2
- tk=8.6.9=hed695b0_1002
- werkzeug=0.15.5=py_0
- wheel=0.32.0=py35_1000
- xorg-kbproto=1.0.7=h14c3975_1002
- xorg-libice=1.0.10=h516909a_0
- xorg-libsm=1.2.3=h84519dc_1000
- xorg-libx11=1.6.8=h516909a_0
- xorg-libxau=1.0.9=h14c3975_0
- xorg-libxdmcp=1.1.3=h516909a_0
- xorg-libxext=1.3.4=h516909a_0
- xorg-libxrender=0.9.10=h516909a_1002
- xorg-libxt=1.2.0=h516909a_0
- xorg-renderproto=0.11.1=h14c3975_1002
- xorg-xextproto=7.3.0=h14c3975_1002
- xorg-xproto=7.0.31=h14c3975_1007
- xz=5.2.4=h14c3975_1001
- zlib=1.2.11=h516909a_1005
- zstd=1.4.0=h3b9ef0a_0
- pip:
- plasflow==1.1.0
prefix: /home/users/ldenies/apps/miniconda3/envs/PlasFlow
......@@ -12,6 +12,13 @@ OUTDIR: /path/to/samples
# Define size of split fasta files (default 10 000 sequences/file)
size_fasta: 100000
# Workflow (default: "complete")
# complete: complete pipeline: toxin + virulence + (AMR + MGE) prediction
# Tox: toxin prediction
# Vir: virulence prediction
# AMR: antimicrobial resistance (AMR) & mobile genetic element (MGE) prediction
workflow: "complete"
###########
# SignalP #
###########
......@@ -24,7 +31,7 @@ signalp: "/path/to/signalp-4.1/signalp"
############
# Define path to HMM
hmmscan_tool: "/path/to/hmmer-3.2.1/src/hmmsearch"
hmmscan_tool: "hmmsearch"
hmm_file: "databases/toxins/combined_Toxin.hmm"
#################
......@@ -37,18 +44,15 @@ vir_hmm_file: "databases/virulence/Virulence_factor.hmm"
# AMR #
#############
# Define path to deepARG
deep_ARG: "scripts/deeparg-ss/deepARG.py"
deep_ARG: "submodules/deeparg-ss/deepARG.py"
#Define path to Plasflow
Plasflow: "scripts/PlasFlow/PlasFlow.py"
Plasflow: "PlasFlow.py"
# Define path to phage prediction tools
# Virsorter
virsorter: "scripts/VirSorter/wrapper_phage_contigs_sorter_iPlant.pl"
virsorter: "wrapper_phage_contigs_sorter_iPlant.pl"
virsorter_data: "scripts/virsorter-data"
#VirFinder
DeepVirFinder: "scripts/DeepVirFinder/dvf.py"
DeepVirFinder: "submodules/DeepVirFinder/dvf.py"
name: biopython
channels:
- conda-forge
- bioconda
......@@ -66,5 +65,3 @@ dependencies:
- xorg-libxdmcp=1.1.3=h516909a_0
- xz=5.2.4=h14c3975_4
- zlib=1.2.11=h7b6447c_3
prefix: /home/users/ldenies/apps/miniconda3/envs/biopython
name: AMR.yml
channels:
- conda-forge
- bioconda
......
name: virfinder
channels:
- conda-forge
- bioconda
......@@ -67,5 +66,3 @@ dependencies:
- xz=5.2.4=h14c3975_1001
- yaml=0.1.7=h14c3975_1001
- zlib=1.2.11=h516909a_1006
prefix: /home/users/ldenies/apps/miniconda3/envs/virfinder
channels:
- bioconda
- conda-forge
- defaults
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=0_gnu
- hmmer=3.2.1=he1b5a44_2
- libgcc-ng=9.2.0=h24d8f2e_2
- libgomp=9.2.0=h24d8f2e_2
- libstdcxx-ng=9.2.0=hdf63c60_2
name: PathoFact
channels:
- bioconda
- conda-forge
- defaults
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=1_llvm
- aioeasywebdav=2.4.0=py36_1000
- aiohttp=3.6.2=py36h516909a_0
- appdirs=1.4.3=py_1
- asn1crypto=1.3.0=py36_0
- async-timeout=3.0.1=py_1000
- attrs=19.3.0=py_0
- bcrypt=3.1.7=py36h8c4c3a4_1
- boto3=1.12.41=pyh9f0ad1d_0
- botocore=1.15.41=pyh9f0ad1d_0
- brotlipy=0.7.0=py36h8c4c3a4_1000
- bzip2=1.0.8=h516909a_2
- ca-certificates=2020.4.5.1=hecc5488_0
- cachetools=3.1.1=py_0
- cairo=1.16.0=hcf35c78_1003
- certifi=2020.4.5.1=py36h9f0ad1d_0
- cffi=1.14.0=py36hd463f26_0
- chardet=3.0.4=py36h9f0ad1d_1006
- configargparse=1.2.1=pyh9f0ad1d_0
- cryptography=2.5=py36hb7f436b_1
- datrie=0.8.2=py36h8c4c3a4_0
- decorator=4.4.2=py_0
- docutils=0.15.2=py36_0
- dropbox=9.4.0=py_0
- expat=2.2.9=he1b5a44_2
- fftw=3.3.8=mpi_mpich_h3f9e1be_1010
- filechunkio=1.8=py_2
- fontconfig=2.13.1=h86ecdb6_1001
- freetype=2.10.1=he06d7ca_0
- ftputil=3.4=py_0
- gdk-pixbuf=2.36.12=h3f25603_1005
- gettext=0.19.8.1=hc5be6a0_1002
- ghostscript=9.22=hf484d3e_1001
- giflib=5.1.7=h516909a_1
- gitdb=4.0.4=py_0
- gitpython=3.1.1=py_0
- glib=2.64.2=h6f030ca_0
- gobject-introspection=1.58.2=py36h6d43c07_1004
- google-api-core=1.17.0=py36h9f0ad1d_0
- google-auth=1.14.0=pyh9f0ad1d_0
- google-cloud-core=1.3.0=py_0
- google-cloud-storage=1.27.0=pyh9f0ad1d_0
- google-resumable-media=0.5.0=py_1
- googleapis-common-protos=1.51.0=py36h9f0ad1d_2
- graphite2=1.3.13=he1b5a44_1001
- graphviz=2.38.0=hf68f40c_1011
- harfbuzz=2.4.0=h9f30f68_3
- icu=64.2=he1b5a44_1
- idna=2.9=py_1
- idna_ssl=1.1.0=py36_1000
- imagemagick=7.0.8_54=pl526h39023e4_0
- importlib-metadata=1.6.0=py36h9f0ad1d_0
- importlib_metadata=1.6.0=0
- jbig=2.1=h516909a_2002
- jinja2=2.11.2=pyh9f0ad1d_0
- jmespath=0.9.5=py_0
- jpeg=9c=h14c3975_1001
- jsonschema=3.2.0=py36h9f0ad1d_1
- libblas=3.8.0=16_openblas
- libcblas=3.8.0=16_openblas
- libcroco=0.6.13=h8d621e5_1
- libffi=3.2.1=he1b5a44_1007
- libgcc-ng=9.2.0=h24d8f2e_2
- libgfortran-ng=7.3.0=hdf63c60_5
- libiconv=1.15=h516909a_1006
- liblapack=3.8.0=16_openblas
- libopenblas=0.3.9=h5ec1e0e_0
- libpng=1.6.37=hed695b0_1
- libprotobuf=3.11.4=h8b12597_0
- librsvg=2.44.14=h11c8777_0
- libstdcxx-ng=9.2.0=hdf63c60_2
- libtiff=4.1.0=hc3755c2_3
- libtool=2.4.6=h14c3975_1002
- libuuid=2.32.1=h14c3975_1000
- libwebp=1.0.2=hf4e8a37_4
- libxcb=1.13=h14c3975_1002
- libxml2=2.9.10=hee79883_0
- llvm-openmp=10.0.0=hc9558a2_0
- lz4-c=1.9.2=he1b5a44_0
- markupsafe=1.1.1=py36h8c4c3a4_1
- mpi=1.0=mpich
- mpich=3.3.2=hc856adb_0
- multidict=4.7.5=py36h516909a_0
- ncurses=5.9=10
- networkx=2.4=py_1
- numpy=1.18.1=py36h7314795_1
- openjpeg=2.3.1=h981e76c_3
- openssl=1.0.2u=h516909a_0
- pandas=1.0.3=py36h830a2c2_1
- pango=1.40.14=he7ab937_1005
- paramiko=2.7.1=py36_0
- pcre=8.44=he1b5a44_0
- perl=5.26.2=h516909a_1006
- pip=20.0.2=py_2
- pixman=0.38.0=h516909a_1003
- pkg-config=0.29.2=h516909a_1006
- prettytable=0.7.2=py_3
- protobuf=3.11.4=py36h831f99a_1
- psutil=5.7.0=py36h8c4c3a4_1
- pthread-stubs=0.4=h14c3975_1001
- pyasn1=0.4.8=py_0
- pyasn1-modules=0.2.7=py_0
- pycparser=2.20=py_0
- pygments=2.6.1=py_0
- pygraphviz=1.5=py36h8c4c3a4_1002
- pynacl=1.3.0=py36h516909a_1001
- pyopenssl=19.0.0=py36_0
- pyrsistent=0.16.0=py36h8c4c3a4_0
- pysftp=0.2.9=py_1
- pysocks=1.7.1=py36h9f0ad1d_1
- python=3.6.4=0
- python-dateutil=2.8.1=py_0
- python-irodsclient=0.8.2=py_0
- python_abi=3.6=1_cp36m
- pytz=2019.3=py_0
- pyyaml=5.3.1=py36h8c4c3a4_0
- ratelimiter=1.2.0=py36_1000
- readline=7.0=0
- requests=2.23.0=pyh8c360ce_2