jerry73204/rust-tfrecord

reqwest introduces a lot of transitive dependencies

Closed this issue ยท 4 comments

First of all, thanks a lot for this crate! We use it in sticker2 to write Tensorboard summaries during training and it works great ๐ŸŽ‰ . However, adding rust-tfrecord as a dependency added a lot of transitive dependencies. The main culprit is reqwest:

โ”‚   โ”œโ”€โ”€ reqwest v0.10.8
โ”‚   โ”‚   โ”œโ”€โ”€ base64 v0.12.3
โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”œโ”€โ”€ encoding_rs v0.8.24
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ cfg-if v0.1.10
โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.5
โ”‚   โ”‚   โ”œโ”€โ”€ futures-util v0.3.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-io v0.3.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-task v0.3.5
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ once_cell v1.4.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ memchr v2.3.3
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project v0.4.23
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ pin-project-internal v0.4.23
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ proc-macro2 v1.0.13 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ quote v1.0.6 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ syn v1.0.22 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-utils v0.1.0
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ slab v0.4.2
โ”‚   โ”‚   โ”œโ”€โ”€ http v0.2.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ fnv v1.0.7
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ itoa v0.4.5
โ”‚   โ”‚   โ”œโ”€โ”€ http-body v0.3.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ http v0.2.1 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ hyper v0.13.7
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-channel v0.3.5
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ futures-core v0.3.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-util v0.3.5 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ h2 v0.2.6
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ fnv v1.0.7
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-sink v0.3.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-util v0.3.5 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ http v0.2.1 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ indexmap v1.3.2 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ slab v0.4.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tokio v0.2.22
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ fnv v1.0.7
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ iovec v0.1.4
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ libc v0.2.70
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ lazy_static v1.4.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ memchr v2.3.3
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ mio v0.6.22
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v0.1.10
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ iovec v0.1.4 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ libc v0.2.70
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.8 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ net2 v0.2.34
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v0.1.10
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ libc v0.2.70
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ slab v0.4.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ num_cpus v1.13.0 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.1.7
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ slab v0.4.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tokio-util v0.3.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-sink v0.3.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.8 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.1.7
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ tokio v0.2.22 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ tracing v0.1.19
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ cfg-if v0.1.10
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ log v0.4.8 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ tracing-core v0.1.15
โ”‚   โ”‚   โ”‚   โ”‚           โ””โ”€โ”€ lazy_static v1.4.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ http v0.2.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ http-body v0.3.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ httparse v1.3.4
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ itoa v0.4.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project v0.4.23 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ socket2 v0.3.12 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ time v0.1.43 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tokio v0.2.22 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tower-service v0.3.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tracing v0.1.19 (*)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ want v0.3.0
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ log v0.4.8 (*)
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ try-lock v0.2.3
โ”‚   โ”‚   โ”œโ”€โ”€ hyper-tls v0.4.3
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v0.5.6
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ hyper v0.13.7 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ native-tls v0.2.4
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.8 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ openssl v0.10.30
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bitflags v1.2.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v0.1.10
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ foreign-types v0.3.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ foreign-types-shared v0.1.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ lazy_static v1.4.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ libc v0.2.70
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ openssl-sys v0.9.58 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ openssl-probe v0.1.2
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ openssl-sys v0.9.58 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ tokio v0.2.22 (*)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ tokio-tls v0.3.1
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ native-tls v0.2.4 (*)
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ tokio v0.2.22 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ipnet v2.3.0
โ”‚   โ”‚   โ”œโ”€โ”€ lazy_static v1.4.0
โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.8 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ mime v0.3.16
โ”‚   โ”‚   โ”œโ”€โ”€ mime_guess v2.0.3
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ mime v0.3.16
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ unicase v2.6.0
โ”‚   โ”‚   โ”‚       [build-dependencies]
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ version_check v0.9.2
โ”‚   โ”‚   โ”‚   [build-dependencies]
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ unicase v2.6.0 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ native-tls v0.2.4 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ percent-encoding v2.1.0
โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.1.7
โ”‚   โ”‚   โ”œโ”€โ”€ serde v1.0.110 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ serde_urlencoded v0.6.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ dtoa v0.4.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ itoa v0.4.5
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ serde v1.0.110 (*)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ url v2.1.1
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ idna v0.2.0
โ”‚   โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ matches v0.1.8
โ”‚   โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ unicode-bidi v0.3.4
โ”‚   โ”‚   โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ matches v0.1.8
โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ unicode-normalization v0.1.12 (*)
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ matches v0.1.8
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ percent-encoding v2.1.0
โ”‚   โ”‚   โ”œโ”€โ”€ tokio v0.2.22 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ tokio-tls v0.3.1 (*)
โ”‚   โ”‚   โ””โ”€โ”€ url v2.1.1 (*)

Of course, there are duplicates, but it's still many additional dependencies. From git grep-ing, it seems that reqwest is only used for blocking GET requests. Would you be opposed to replacing these by the curl crate, which would reduce the number of dependencies a lot? For downstream crates it would already help a lot if reqwest was removed from build-dependencies/build.rs, because dev-dependencies are not used IIRC.

I can do a PR if this would be ok for you.

Small update: by using curl in place of reqwest in the build-dependencies of tfrecord, the number of transitive dependencies of sticker2 changes from 292 to 230.

I agree some deps are not necessary and it's definitely a large bloating. curl looks good to me except it introduces curl-sys that might breaks the compatibility on non-UNIX land. I'm looking at ureq to see if it can help.

Now ureq is shipped to v0.4.1. Please see if it works for you.

Thanks a lot, that really helped. Down from 292 to 248.