Я сделал какой-либо ущерб, выполнив «sudo apt-get purge ./python»?

6

Как вы знаете, у Ubuntu уже есть python . Однако я загрузил исходный код версии 3.5.1 и скомпилировал его с помощью

./configure
make
make test
sudo make install

My pwd на данный момент /home/SarpSTA/Downloads/Python-3.5.1

Я хотел запустить purge в этой новой установке.

sudo apt-get purge python не выполнит, так как в его пути использовалась старая версия, а не новая. Итак, пока я был в папке, я побежал sudo apt-get purge ./python . Он создал очень длинный вывод, похожий на:

E: Release 'python' for 'package-name' was not found

для каждого отдельного пакета, установленного на моем компьютере вместо package-name .

Я что-то удалял или был просто ошибкой?

    
задан SarpSTA 21.02.2016 в 00:11
источник

3 ответа

15

Это не так. Вы можете использовать apt-get purge только с пакетами, установленными APT или dpkg (пакеты Debian .deb). Если вы скомпилировали свое программное обеспечение из исходного APT, он не будет отслеживать его.

Если у вас все еще есть папка с исходным кодом, cd в нее и запустите sudo make uninstall . Эта команда должна удалить скомпилированное программное обеспечение.

Если у вас больше нет источника, я рекомендую вам его снова загрузить, запустите ./configure внутри него, а затем sudo make uninstall .

Будьте очень осторожны, чтобы не удалить установку Python по умолчанию . Это очень важная часть Ubuntu, и если вы удалите ее, у вас будет сломанная система.

Нет, вы не нанесли никакого урона, выполнив sudo apt-get purge ./python , потому что пакет не найден.

    
ответ дан Eduardo Cola 21.02.2016 в 00:20
7

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

Что касается попытки очистить установленную версию, вам не нужно ее чистить, просто создайте символическую ссылку на установленную версию, которую вы хотите по умолчанию. Конечно, вы также можете вызвать python по полному пути к установленной версии.

Пример:

$ /usr/bin/python3.7 myprogram.py

Правильной командой для удаления является указание имени пакета в качестве параметра удаления.

Пример удаления пакета:

$ sudo apt-get remove python

Вы можете указать текущую символическую ссылку в вашей системе, выполнив:

$ ls -l /usr/bin/python*

Вышеупомянутая команда также покажет вам другие версии, которые будут установлены.

Конечно, во многих программах используется shebang ( #! ), чтобы указать, что программа-интерпретатор запускается. Вы можете увидеть пример этого, выполнив эту команду:

$ egrep python * | egrep "/usr/bin/python"

Вывод указанной выше команды покажет вам имя различных приложений python с указанной версией для запуска. Программа и команда для запуска разделяются двоеточием в списке.

    
ответ дан L. D. James 21.02.2016 в 01:00
7

Чтобы понять, что apt-get purge ./python попытался сделать, давайте рассмотрим manpage . Во-первых, общий синтаксис:

apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file]
        [-t=target_release] [-a=architecture] {update | upgrade |
        dselect-upgrade | dist-upgrade |
        install pkg [{=pkg_version_number | /target_release}]...  |
        remove pkg...  | purge pkg...  |
        source pkg [{=pkg_version_number | /target_release}]...  |

Вы увидите, что apt-get поддерживает указание целевого выпуска через /foo . Таким образом, в ./python , apt-get интерпретируется python как целевой выпуск. Мы вернемся к этому через мгновение.

Теперь, как насчет . ? apt-get поддерживает регулярные выражения, и если имя пакета содержит . , * и т. д., оно будет рассматривать его как регулярное выражение. И apt-get проверяет частичные совпадения - если данное выражение совпадает с частью имени пакета, этот пакет выбран:

If no package matches the given expression and the expression
contains one of '.', '?' or '*' then it is assumed to be a POSIX
regular expression, and it is applied to all package names in the
database. Any matches are then installed (or removed). Note that
matching is done by substring so 'lo.*' matches 'how-lo' and
'lowest'. If this is undesired, anchor the regular expression with
a '^' or '$' character, or create a more specific regular
expression.

. соответствует каждому символу - так что каждый имя пакета удовлетворит его. Поэтому apt-get будет выбирать каждый пакет, который он знает.

Теперь, вернемся к целевому выпуску, он используется для указания того, какой репозиторий вы хотите настроить для этой операции, если один и тот же пакет предоставляется несколькими репозиториями. См. Как устанавливать обновления только из определенного репозитория?

python не является допустимым выпуском по умолчанию Ubuntu (и вряд ли будет одним). Итак, несмотря на то, что apt-get выбрал каждый пакет, который он знал о , он не смог найти соответствующий выпуск и, следовательно, не удалось.

    
ответ дан muru 21.02.2016 в 14:32