Пакет Rust с использованием нестабильной библиотечной функции 'iter_nth_back' - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть приложение Rust, о котором я мало что знаю, и я вызываю его из программы на Python, над которой я работаю. Я ничего не изменил в исходном коде Rust, но процесс сборки этих двух проектов просто перестал работать с такой ошибкой:

[... several similar errors]
error[E0658]: use of unstable library feature 'iter_nth_back'
   --> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ndarray-0.13.0/src/iterators/mod.rs:585:46
    |
585 |         either_mut!(self.inner, iter => iter.nth_back(n))
    |                                              ^^^^^^^^
    |
    = note: for more information, see https://github.com/rust-lang/rust/issues/56995

error: aborting due to 5 previous errors

For more information about this error, try `rustc --explain E0658`.
error: Could not compile `ndarray`.

Я посмотрел список ndarray релизов , а выпуск 0.13.0 вышел несколько дней назад, поэтому я подозреваю, что он несовместим с моей средой сборки.

Как я могу заставить мою сборку работать снова?

Вотполные шаги, чтобы воспроизвести проблему:

$ sudo docker run -it --rm rust:1.36.0
# USER=foo cargo new hello_world --bin
     Created binary (application) `hello_world` package
# cd hello_world/
# echo 'bio = "^0"' >> Cargo.toml
# cargo build
    Updating crates.io index
  Downloaded bio v0.29.0
  Downloaded [... many more ...]
  Downloaded ndarray v0.13.0
  Downloaded [... many more ...]
   Compiling proc-macro2 v1.0.4
   Compiling [... many more ...]
   Compiling ndarray v0.13.0
   Compiling [... many more ...]
   Compiling statrs v0.11.0
error[E0658]: use of unstable library feature 'iter_nth_back'
   --> /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ndarray-0.13.0/src/iterators/mod.rs:134:5
    |
134 | /     fn nth_back(&mut self, n: usize) -> Option<*mut A> {
135 | |         let index = self.index?;
136 | |         let len = self.dim[0] - index[0];
137 | |         if n < len {
...   |
147 | |         }
148 | |     }
    | |_____^
    |
    = note: for more information, see https://github.com/rust-lang/rust/issues/56995
[... other, similar errors ...]
   Compiling serde_derive v1.0.101
   Compiling strum_macros v0.16.0
   Compiling snafu-derive v0.5.0
error: aborting due to 5 previous errors

For more information about this error, try `rustc --explain E0658`.
error: Could not compile `ndarray`.
warning: build failed, waiting for other jobs to finish...
error: build failed
#

Интересно, что если я запускаю последний образ докера для ржавчины, 1.38, я не вижу ошибки. Тем не менее, мой процесс сборки устанавливает Rust из диспетчера пакетов Ubuntu Xenial, поэтому я, вероятно, не могу его легко обновить.

1 Ответ

1 голос
/ 30 сентября 2019

Новый ответ: Upgrade Rust

Оказалось, что обновление ржавчины не так сложно, как я думал, и тогда мне не нужно менять исходный код Rust.

Вмой .travis.yml файл, я заменил это:

- sudo apt-get install -y cargo

на это:

- sudo curl https://sh.rustup.rs -sSf | sh -s -- -y
- source ~/.cargo/env

Оригинальный ответ: Pin Pin Dependencies

Я попытался добавить явный ndarrayзависимость и закрепление на 0.12, но это не сработало. Затем я заметил, что у bio также был новый релиз за последние несколько дней. Закрепление этой зависимости сработало.

$ sudo docker run -it --rm rust:1.36.0
# USER=foo cargo new hello_world --bin
     Created binary (application) `hello_world` package
# cd hello_world/
# echo 'bio = "~0.28.2"' >> Cargo.toml
# cargo build
    Updating crates.io index
  Downloaded bio v0.28.2
  Downloaded [... many more ...]
  Downloaded ndarray v0.12.1
  Downloaded [... many more ...]
   Compiling proc-macro2 v1.0.4
   Compiling [... many more ...]
   Compiling ndarray v0.12.1
   Compiling [... many more ...]
   Compiling csv v1.1.1
   Compiling hello_world v0.1.0 (/hello_world)
    Finished dev [unoptimized + debuginfo] target(s) in 14m 15s
#
...