Редкая ошибка Python IOError для подключенного диска Samba

TL;DR:

# pkg change-facet \
      version-lock.system/library/gcc/gcc-c-runtime=false \
      version-lock.system/library/gcc/gcc-c++-runtime=false

и повторите попытку.

Итак, проблема в том, что gcc-5— это то, что известно как «групповой» пакет. То есть он состоит (по крайней мере преимущественно )из кучи groupзависимостей.Зависимость group— это зависимость, которая будет установлена, если это возможно, но проигнорирована, если нет. В этом случае не удалось установить одну или несколько зависимостей gcc-5, поэтому они были проигнорированы, и вы получили меньше, чем ожидали.

Когда это происходит (, будь то меньшее количество пакетов или пакеты другой версии ), первое, что вы должны сделать, это сообщить pkg, что вы на самом деле ожидаете. (Теперь разъединение здесь заключается в том, как узнать, чего ожидать; не зная, как проверить gcc-5эту информацию, или даже не зная, что вам это может понадобиться, я не знаю, как на это ответить. )В этом случае выберите одну из ее зависимостей, чтобы посмотреть, поможет ли она; скажем,gcc-c-5(вы выполнили этот шаг для gcc-c++-5, что дало вам ту же проблему, что и я здесь, но я хотел собрать все это вместе в одном ответе ). Это говорит pkgне игнорировать невозможность установить gcc-c-5, а действительно подробно пожаловаться на то, почему его не удалось установить. Надеюсь, в выводе будет что-то, что даст нам представление о том, что делать дальше:

# pkg install -nv gcc-5 gcc-c-5
Creating Plan (Solver setup): |
pkg install: No matching version of developer/gcc-5 can be installed:
  Reject:  pkg://solaris/developer/gcc-5@5.4.0-5.12.0.0.0.115.0
  Reason:  No version matching 'group' dependency developer/gcc/gcc-c++-5 can be installed
    ----------------------------------------
    Reject:  pkg://solaris/developer/gcc/gcc-c++-5@5.4.0-5.12.0.0.0.115.0
    Reason:  No version matching 'require' dependency developer/gcc/gcc-c-5 can be installed
      ----------------------------------------
      Reject:  pkg://solaris/developer/gcc/gcc-c-5@5.4.0-5.12.0.0.0.115.0
      Reason:  No version matching 'require' dependency system/library/gcc/gcc-c++-runtime@5.4.0,5.11-5.12.0.0.0.115.0 can be installed
        ----------------------------------------
        Reject:  pkg://solaris/system/library/gcc/gcc-c++-runtime@5.4.0-5.12.0.0.0.115.0
        Reason:  No version matching 'require' dependency system/library/gcc/gcc-c-runtime@5.4.0,5.11-5.12.0.0.0.115.0 can be installed
          ----------------------------------------
          Reject:  pkg://solaris/system/library/gcc/gcc-c-runtime@5.4.0-5.12.0.0.0.115.0
          Reason:  This version is excluded by installed incorporation consolidation/userland/userland-incorporation@0.5.11-0.175.3.19.0.2.0
          ----------------------------------------
        Reason:  This version is excluded by installed incorporation consolidation/userland/userland-incorporation@0.5.11-0.175.3.19.0.2.0
        ----------------------------------------
      ----------------------------------------
    ----------------------------------------
No matching version of developer/gcc/gcc-c-5 can be installed:
  Reject:  pkg://solaris/developer/gcc/gcc-c-5@5.4.0-5.12.0.0.0.115.0
  Reason:  [already rejected; see above]

Когда вы получаете подобный беспорядок в выводе решателя, вы, как правило, хотите найти самую глубокую -проблему с отступом и посмотреть, сможете ли вы ее исправить. В этом случае вы видите, что он не может установить gcc-c-runtime@5.4.0-5.12.0.0.0.115.0, потому что он исключен установленным включением.

Может быть, нужно отступление. :что такое включение? Как и групповой пакет, это пакет, который в первую очередь предоставляет зависимости, в данном случае зависимости incorporate. Эти зависимости никогда не приводят к установке пакетов; они просто накладывают ограничения на пакеты, которые могут быть установлены. В частности, включение foo@1.2означает, что если fooустановлен, он должен быть в диапазоне версий [1.2, 1.3); то есть минимум1.2(включительно )и максимум1.3(исключая )или все, что соответствует 1.2.x.y.z.....

В этом случаевключение userland-incorporation, которое уже установлено в системе, наложило ограничение на gcc-c-runtime, несовместимое с версией gcc-c-runtime, которая требуется для установки gcc-c-5.

Здесь мы сталкиваемся с одной из странностей оценочной программы Solaris FOSS. Доступные там пакеты плохо интегрированы с остальной системой; они предназначены для установки в более новой версии Solaris. Но они были построены таким образом, что система может, по крайней мере, разумно настроиться на их установку. В этом случае вам придется изменить несколько граней.

Большинство пакетов СОПО в Solaris встроены таким образом, что ограничение, налагаемое этой incorporateзависимостью, может быть ослаблено. Вы можете сделать это, изменив фасет с именем version-lock.<pkg-name>на false. В этом случае gcc-c-runtimeи gcc-c++-runtime— это два пакета, блокирующие установку, которую вы хотите установить, поэтому (, как указано выше ):

.
# pkg change-facet \
      version-lock.system/library/gcc/gcc-c-runtime=false \
      version-lock.system/library/gcc/gcc-c++-runtime=false

Это даст немного результата, но, по-видимому, мало что даст. Однако, как только это будет сделано, мы можем попробовать еще раз:

# pkg install -nv gcc-5 gcc-c-5
           Packages to install:      20
            Packages to update:       2
           Mediators to change:       1
            Services to change:       1
     Estimated space available: 8.54 GB
Estimated space to be consumed: 1.49 GB
       Create boot environment:      No
Create backup boot environment:     Yes
          Rebuild boot archive:      No

Changed mediators:
  mediator gcc:
           version: None -> 5 (system default)

Changed packages:
solaris
  developer/assembler
    None -> 0.5.11,5.11-0.175.3.9.0.2.0:20160528T012706Z
  developer/gcc-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T170530Z
  developer/gcc/gcc-c++-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T164822Z
  developer/gcc/gcc-c-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165027Z
  developer/gcc/gcc-common-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165220Z
  developer/gcc/gcc-gfortran-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165431Z
  developer/gcc/gcc-gobjc-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T165624Z
  developer/gnu-binutils
    None -> 2.23.1,5.11-0.175.3.0.0.30.0:20150821T164528Z
  library/gmp
    None -> 4.3.2,5.11-0.175.3.0.0.30.0:20150821T165358Z
  library/isl
    None -> 0.12.2,5.12-5.12.0.0.0.115.0:20170111T171737Z
  library/mpc
    None -> 0.9,5.11-0.175.3.0.0.30.0:20150821T165558Z
  library/mpfr
    None -> 2.4.2,5.11-0.175.3.0.0.30.0:20150821T165559Z
  release/evaluation
    None -> 1.0,5.12-5.12.0.0.0.115.0:20170111T175931Z
  system/header
    None -> 0.5.11,5.11-0.175.3.19.0.2.0:20170328T014052Z
  system/library/gcc/gcc-c++-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181800Z
  system/library/gcc/gcc-c-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181840Z
  system/library/gcc/gcc-gfortran-runtime
    None -> 4.8.2,5.11-0.175.3.0.0.30.0:20150821T172507Z
  system/library/gcc/gcc-gfortran-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181902Z
  system/library/gcc/gcc-gobjc-runtime
    None -> 4.8.2,5.11-0.175.3.0.0.30.0:20150821T172513Z
  system/library/gcc/gcc-gobjc-runtime-5
    None -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181919Z
  system/library/gcc/gcc-c++-runtime
    4.8.2,5.11-0.175.3.0.0.30.0:20150821T172447Z -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181825Z
  system/library/gcc/gcc-c-runtime
    4.8.2,5.11-0.175.3.0.0.30.0:20150821T172458Z -> 5.4.0,5.12-5.12.0.0.0.115.0:20170111T181848Z

И вуаля, мы получаем кучу установленных пакетов, которые на самом деле что-то содержат. Теперь вы сможете набрать gcc --versionи увидеть, что это действительно 5.4.0. Также обратите внимание, что два пакета, аспекты которых мы разблокировали, были обновлены, и эта возможность доступна после разблокировки.

Вы можете спросить, почему нам не нужно было открывать какие-либо другие грани. Причина этого в том, что в Solaris 11.3 не было GCC 5, а значит, не было никаких ограничений на версии его пакетов. Таким образом, все пакеты gcc-*-5уже не ограничены, и их не нужно разблокировать, чтобы ослабить ограничения.

Вы могли заметить, что пакеты gcc-gfortran-runtimeи gcc-gobjc-runtimeбыли установлены в их версиях 4.8. Это потому, что они все еще ограничены, но ничто из того, что мы делали, не противоречило этим ограничениям. Для согласованности вам, вероятно, также следует разблокировать их, а затем обновить до версии 5.x (или,если вы зашли так далеко, прежде чем пытаться что-либо сделать, просто разблокируйте их с самого начала ).

1
02.08.2019, 12:22
1 ответ

Если ошибка OSError полностью возвращается к вашему коду, перехватите ее и повторите попытку. Если нет, убедитесь, что файл существует непосредственно перед вызовом Matlab. Если Matlab работает часами, не возвращаясь к вам, рассмотрите возможность исправления этого файла с помощью цикла повторных попыток. Источник тут же, вы можете редактировать его, если у вас есть достаточные права.

0
28.01.2020, 00:04

Теги

Похожие вопросы