I installed some package via pip install something
. I want to edit the source code for the package something
. Where is it (on ubuntu 12.04) and how do I make it reload each time I edit the source code and run it?
Currently I am editing the source code, and then running python setup.py again and again, which turns out to be quite a hassle.
asked Apr 15, 2014 at 5:36
2
You should never edit an installed package. Instead, install a forked version of package.
If you need to edit the code frequently, DO NOT install the package via pip install something
and edit the code in ‘…/site_packages/…’
Instead, put the source code under a development directory, and install it with
$ python setup.py develop
or
$ pip install -e path/to/SomePackage
Or use a vcs at the first place
$ pip install -e git+https://github.com/lakshmivyas/hyde.git#egg=hyde
Put your changes in a version control system, and tell pip to install it explicitly.
Reference:
Edit mode
Josiah Yoder
3,0854 gold badges38 silver badges54 bronze badges
answered Apr 15, 2014 at 5:52
Leonardo.ZLeonardo.Z
9,1973 gold badges34 silver badges38 bronze badges
12
You can edit the files installed in /usr/local/lib/python2.7/dist-packages/
. Do note that you will have to use sudo
or become root
.
The better option would be to use virtual environment for your development. Then you can edit the files installed with your permissions inside your virtual environment and only affect the current project.
In this case the files are in ./venv/lib/pythonX.Y/site-packages
The path could be dist-packages
or site-packages
, you can read more in the answer to this question
Note that, as the rest of the people have mentioned, this should only be used sparingly, for small tests or debug, and being sure to revert your changes to prevent issues when upgrading the package.
To properly apply a change to the package (a fix or a new feature) go for the options described in other answers to contribute to the repo or fork it.
answered Apr 15, 2014 at 5:41
oz123oz123
26.9k27 gold badges128 silver badges185 bronze badges
2
I too needed to change some things inside a package. Taking inspiration from the previous answers, You can do the following.
- Fork the package/repo to your GitHub
- clone your forked version and create a new branch of your choice
- make changes and push code to the new branch on your repository
- you can easily use
pip install -e git+repositoryurl@branchname
- There are certain things to consider if its a private repository
answered Apr 1, 2021 at 10:10
I have been using Python for a fairly long time and now I want to modify a Python library to fit my needs.
There are two ways to do this as far as I know. One is to modify the source code itself. Other is to write a wrapper around the original library.
But I don’t understand which is better, doing what is a good practice editing source or writing a wrapper? And in which situation one is preferred over other?
Aaron Hall
5,8454 gold badges24 silver badges47 bronze badges
asked Jun 5, 2016 at 10:26
2
It mostly depends on how deep are your changes. Wrappers can bring additional behavior, but can rarely change the existing one. For instance, if a target library writes some data to a file and you want, instead, to send this data to a database, unless the library was designed to allow that, you won’t be able to change the behavior just with a wrapper.
-
If the changes are shallow and additive, use a wrapper. You may need a wrapper anyway if you want to be able to move to a different library later without having to modify a large part of your application.
-
If the changes are deep and substantial:
-
Do a fork on GitHub if the library is hosted there, or contact the author of the library if it is hosted somewhere else.
-
Make the change.
-
Share the change with the author and the community: if you needed a different behavior, there are chances other people do need it too.
-
When changing an existing library, if the original author considers that your changes shouldn’t be merged and should stay as a fork, make sure you create your own pip package. This would not only simplify the deployment of this library for you, but also make it possible for other people to use your fork instead of the original library if they need the modified behavior.
answered Jun 5, 2016 at 11:11
Arseni MourzenkoArseni Mourzenko
134k31 gold badges340 silver badges509 bronze badges
I have been using Python for a fairly long time and now I want to modify a Python library to fit my needs.
There are two ways to do this as far as I know. One is to modify the source code itself. Other is to write a wrapper around the original library.
But I don’t understand which is better, doing what is a good practice editing source or writing a wrapper? And in which situation one is preferred over other?
Aaron Hall
5,8454 gold badges24 silver badges47 bronze badges
asked Jun 5, 2016 at 10:26
2
It mostly depends on how deep are your changes. Wrappers can bring additional behavior, but can rarely change the existing one. For instance, if a target library writes some data to a file and you want, instead, to send this data to a database, unless the library was designed to allow that, you won’t be able to change the behavior just with a wrapper.
-
If the changes are shallow and additive, use a wrapper. You may need a wrapper anyway if you want to be able to move to a different library later without having to modify a large part of your application.
-
If the changes are deep and substantial:
-
Do a fork on GitHub if the library is hosted there, or contact the author of the library if it is hosted somewhere else.
-
Make the change.
-
Share the change with the author and the community: if you needed a different behavior, there are chances other people do need it too.
-
When changing an existing library, if the original author considers that your changes shouldn’t be merged and should stay as a fork, make sure you create your own pip package. This would not only simplify the deployment of this library for you, but also make it possible for other people to use your fork instead of the original library if they need the modified behavior.
answered Jun 5, 2016 at 11:11
Arseni MourzenkoArseni Mourzenko
134k31 gold badges340 silver badges509 bronze badges
Чтобы быть более конкретным, я хочу изменить некоторые функции в scikit-learn
и импортировать их на python. Но я не знаю, как работать.
Я пытался изменить файлы.py прямо из того места, где хранится sklearn в моем локальном каталоге, но есть некоторые файлы, которые я не мог открыть для изменения, например, с .cp36-win_amd64
.
Любые советы будут полезны!
14 март 2018, в 16:02
Поделиться
Источник
2 ответа
Удалите пакет scikit-learn, клонируйте интересующую вас версию из github. Перейдите в каталог, в котором вы клонировали его и запустили:
pip3 install -e ./
Это установит пакет в режиме разработки. Все внесенные вами изменения вступят в силу при следующем запуске приложения.
Alex Hristov
14 март 2018, в 13:12
Поделиться
Изменение исходных файлов — не очень хорошая идея… особенно если вы захотите использовать «немодифицированную» версию позже. Мой совет:
- Оформить заказ в реестре Scikit-learn на github
- Дайте ему собственное имя (например, myScikitLearn)
- Установите его, используя pip install -e
- Все изменения, внесенные в исходные файлы myScikitLearn, могут быть немедленно использованы в вашем коде
ma3oun
14 март 2018, в 12:22
Поделиться
Ещё вопросы
- 1Я пытаюсь реализовать TitlePageIndicator и CirclePageIndicator на том же ViewPager
- 1установить расширенную ширину и высоту ImageView программно — Android
- 1Как определить вектор, используя 2 точки на карте Android?
- 1Панель консоли в JavaFX
- 0Получить JSONArray с помощью StringRequest из Android
- 1Как запустить файл функций Cucumber-JVM из командной строки
- 0Date.Parse генерация некоторого случайного числа при конвертации — JQuery
- 0Как получить доступ к `$ scope.search.value`?
- 1Кнопка загрузки и выгрузки не работает для третьего и четвертого столбца моей базы данных
- 1Android, Как добавить растровый слой поверх другого растрового слоя, динамически из списка?
- 1Функции Firebase — добавление нового значения к старому значению
- 0Как я могу конвертировать мой BLOB-файл в WAV-файл?
- 1Процедура SQL Server и набор записей
- 0Установите libcurl для C ++ в Windows
- 0компилятор не видит первую строку?
- 0Шаблон обработчика событий: неразрешенный внешний
- 0поверните URL изображения в теге img, чтобы предварительно загрузить все
- 0Как скачать файл XML с конечной точки REST с AngularJS
- 0Как сделать фоновый элемент не кликабельным на ipad
- 0Использование двухмерных массивов в качестве параметров
- 1Java конвертировать JSONObject в параметр URL
- 1Как привести клиента на другую страницу и изменить загруженный файл в коде в .NET?
- 0Я хочу загрузить файл мой файл
- 1Запуск приложения по гиперссылке
- 0тот же код, но другой дисплей
- 0Заменить главную страницу и меню модулем
- 1передать параметры из C ++ для сборки в Android
- 1С управлением Android EditText есть простой способ отображать только цифры?
- 0Функция jQuery для заполнения формы не будет работать
- 1Upcasting и Downcasting в c #
- 0Как сохранить HTML-контент в файл, не сохраняя в базе данных
- 1Android эмулятор не запускается при использовании масштаба (Win7 x64)
- 1Кадр данных Pandas в Excel с определенным диапазоном имен
- 0Запустите проект Playn HTML в Remote
- 1Код ММС для Android
- 1Как выполнить файл конфигурации flume с помощью Java-программы?
- 0Предотвращение перехода якоря при загрузке страницы
- 0передача данных формы php в окно js
- 0Фильтровать сопоставленные элементы по имени класса в Angular JS.
- 0Запретить ввод формы кнопки ввода, если ввод электронной почты находится в фокусе (jquery)
- 0C ++ File I / O и указатели
- 0Метод загрузки сетки DHTMLX не загружает данные из файла php
- 0ионное содержимое с прокруткой
- 0Построение дерева из предзаказа в C ++
- 0предотвратить сброс сброса php после отправки
- 1Отказ запустить Tomcat от IntelliJ IDEA
- 1повторное приведение унаследованного поля
- 1XML -> DOM -> Изменить -> Строка
- 0Как заставить php писать теги <div> на каждой стороне некоторого контента, который отправляется из формы?
- 1Потребительско-потребительский шаблон с пиарроу