Python windows или linux

Какую операционную систему использовать для разработки на Python?

Любую из распространенных. Python прекрасно адаптирован и под Linux и под Windows.
А с появление на Windows 10 подсистемы Ubuntu Linux Subsystem — вообще полная идентичность для утилит командной строки.

Подскажите стоит ли переходить на Linux, в чем плюсы минусы, какой дистрибутив выбрать, поделитесь опытом. Как Linux сочетается с другими языками программирования?

Linux нормально сочетается с языками программирования.
Кроме .NET — это вам к Windows
Кроме разработки под Apple — это вам к MacOSX

Для перехода я бы предложил самый допиленный под десктопное использование дистрибутив — Ubuntu Linux.

Правда целесообразность этого перехода мне представляется сомнительной.
Все равно среда Linux на сервере (администрирование через конфигурационные файлы) отличается от того, как вы будете администрировать свой личный комп (через GUI).

А для идентичной серверной среды следует использовать Vagrant, Docker, виртуальные машины — на любой операционной системе. Даже если вы работаете под Linux — их использование целесообразно для достижения полной идентичности серверной среде.

Из недостатков Linux — кривоватый графический интерфейс. Который не дотягивает ни до Window, ни до MacOSX. Но с этим можно мириться.

Из возможно вам не очевидных недостатков — запуск под Linux программ предназначенных для Windows будет или вообще невозможет, или совмещен с большими трудностями. То есть придется отказаться от любимых Windows-игр и от ряда программ, таких как Photoshop, например.

Всем привет изучаю питон совсем не давно, вопрос такой

, стоит ли переходить с windows на linux (говорят он более производительный) и с какими я могу столкнуться проблемами при дальнейшей работе на питоне ???


24

ответов

Не поиграть в игрушки, не запустить офис

Если с Linux ранее не сталкивались — не стоит. Продолжайте изучать Python

На винде? С отсутствием некоторых отдельных библиотек. Но есть wsl.

На линуксе? С любыми

Более производительный? Ну хз даже

Aleksey Freeman


Если с Linux ранее не сталкивались — не стоит. Про…

Для более комфортной работы — почему бы и да? Да, будет больно, но потом как поймет — будет замечательно)

Tishka17


На винде? С отсутствием некоторых отдельных библио…

я прям совсем не давно начал изучать питон и понятие не имею что такое wsl )

Serhii


Для более комфортной работы — почему бы и да? Да, …

Так комфортная работа начнётся когда Linux будет изучен. А пока не изучен — будет боль и унижение от Linux с Python =)

86202 Pavel


я прям совсем не давно начал изучать питон и поня…

Это к питону не относится, это виндовая штука

86202 Pavel


я прям совсем не давно начал изучать питон и поня…

Тула для запуска Linux-приложений в Windows

Aleksey Freeman


Так комфортная работа начнётся когда Linux будет и…

Изучение python для тех, кто не сталкивался с программированием раньше — тоже боль. А сверху ещё перейти на линух — так почему сразу не раздолбать себе пятую точку от попаболи чтобы было прям кайф потом?

Переходить не стоит, раз такой вопрос возник. Вот если понадобится, что-то, что потребует Линукс, то тогда и начнешь изучение. А сейчас где комфортнее там и изучай питон, хоть на маке.

прям существенная разница такая между видоус и линуксом?

Мне по ощущением да, тем более Линукс более интересен для изучения)

86202 Pavel


прям существенная разница такая между видоус и лин…

даже в коле
винда: 50млн строк
линукс: 12млн

Serhii


Мне по ощущением да, тем более Линукс более интере…

Я ноут откапал старый, и слышал что линукс быстрее работает, вот и думаю на фоне этого стоит ли там ставить линукс

86202 Pavel


прям существенная разница такая между видоус и лин…

В плане питона — нет, разве что какие-то библиотеки собирать проще будет. Но знания линукса скорее всего помогут, да и многие штуки на нем легче делаются.

86202 Pavel


Я ноут откапал старый, и слышал что линукс быстрее…

если для слабых, можешь поставить antix linux

86202 Pavel


Буду рад если разжуешь =)

для написания винды потрачено 50млн строк кода
в линуксе 12 млн строк кода

86202 Pavel


Буду рад если разжуешь =)

Где можно линукс скачать?

Челодой маловек


если для слабых, можешь поставить antix linux

Без сустемд новичку будет не прикольно

а что 🇷🇺


В плане питона — нет, разве что какие-то библиотек…

Т. Е. На линуксе больше возможностей для питона получается?

86202 Pavel


Т. Е. На линуксе больше возможностей для питона по…

Ну питон у тебя везде одинаково работать будет

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?


Rꙮman Yankꙮvsky


29

А вообще, что может смущать в самой Julia — бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как «хаки» и произвол. Короче говоря, с…


Viktor G.


2

30500 за редактор? )


Владимир


47

а через ESC-код ?


Alexey Kulakov


29

Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится


notme


18

У меня есть функция где происходит это:
write_bit(buffer, 1);
write_bit(buffer, 0);
write_bit(buffer, 1);
write_bit(buffer, 1);
write_bit(buffer, 1);
w…


~


14

Добрый день!
Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью?
Можно написать динамический массив, можно связный …


Филипп


7

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех «ибешни…


Alex Sherbakov


5

Ребят в СИ можно реализовать ООП?


Николай


33

https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76

15 лет назад…


Maksim Lapshin


20

Распознавание голоса и речи на C#

UnmanagedCoder 05.05.2025

Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . .

Реализация своих итераторов в C++

NullReferenced 05.05.2025

Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . .

Разработка собственного фреймворка для тестирования в C#

UnmanagedCoder 04.05.2025

C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры. . .

Распределенная трассировка в Java с помощью OpenTelemetry

Javaican 04.05.2025

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

Шаблоны обнаружения сервисов в Kubernetes

Mr. Docker 04.05.2025

Современные Kubernetes-инфраструктуры сталкиваются с серьёзными вызовами. Развертывание в нескольких регионах и облаках одновременно, необходимость обеспечения низкой задержки для глобально. . .

Создаем SPA на C# и Blazor

stackOverflow 04.05.2025

Мир веб-разработки за последние десять лет претерпел коллосальные изменения. Переход от традиционных многостраничных сайтов к одностраничным приложениям (Single Page Applications, SPA) — это. . .

Реализация шаблонов проектирования GoF на C++

NullReferenced 04.05.2025

«Банда четырёх» (Gang of Four или GoF) — Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — в 1994 году сформировали канон шаблонов, который выдержал проверку временем. И хотя C++ претерпел. . .

C# и сети: Сокеты, gRPC и SignalR

UnmanagedCoder 04.05.2025

Сетевые технологии не стоят на месте, а вместе с ними эволюционируют и инструменты разработки. В . NET появилось множество решений — от низкоуровневых сокетов, позволяющих управлять каждым байтом. . .

Создание микросервисов с Domain-Driven Design

ArchitectMsa 04.05.2025

Архитектура микросервисов за последние годы превратилась в мощный архитектурный подход, который позволяет разрабатывать гибкие, масштабируемые и устойчивые системы. А если добавить сюда ещё и. . .

Многопоточность в C++: Современные техники C++26

bytestream 04.05.2025

C++ долго жил по принципу «один поток — одна задача» — как старательный солдатик, выполняющий команды одну за другой. В то время, когда процессоры уже обзавелись несколькими ядрами, этот подход стал. . .

Multiprocessing is an excellent package if you ever want to speed up your code without leaving Python. When I started working with multiprocessing, I was unaware of the differences between Windows and Linux, which set me back several weeks of development time on a relatively big project. Let’s quickly see how multiprocessing works and where Windows and Linux diverge.

The quickest way of showing how to use multiprocessing is to run a simple function without blocking the main program:

import multiprocessing as mp
from time import sleep


def simple_func():
    print('Starting simple func')
    sleep(1)
    print('Finishing simple func')


if __name__ == '__main__':
    p = mp.Process(target=simple_func)
    p.start()
    print('Waiting for simple func to end')
    p.join()

Which outputs the following:

Waiting for simple func to end
Starting simple func
Finishing simple func

The output is what we were expecting. Let’s go to the core of the problem at hand by studying how this code behaves:

import multiprocessing as mp
from time import sleep


print('Before defining simple_func')

def simple_func():
    print('Starting simple func')
    sleep(1)
    print('Finishing simple func')


if __name__ == '__main__':
    p = mp.Process(target=simple_func)
    p.start()
    print('Waiting for simple func to end')
    p.join()

If we run this code on Windows, we get the following output:

Before defining simple_func
Waiting for simple func to end
Before defining simple_func
Starting simple func
Finishing simple func

While on Linux we get the following output:

Before defining simple_func
Waiting for simple func to end
Starting simple func
Finishing simple func

It does not look like much, except for the second Before defining simple_func, and this difference is crucial. On Linux, when you start a child process, it is Forked. It means that the child process inherits the memory state of the parent process. On Windows (and by default on Mac), however, processes are Spawned. It means that a new interpreter starts and the code reruns.

It explains why, if we run the code on Windows, we get twice the line Before defining simple_func. As you may have noticed, this could have been much worse if we wouldn’t include the if __main__ at the end of the file, let’s check it out. On Windows, it produces a very long error, that finishes with:

RuntimeError: 
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

While on Linux, it works just fine. It may not look like much, but imagine you have some computationally expensive initialization task. Perhaps you do some system checks when the program runs. Probably you don’t want to run all those checks for every process you start. It can get even more interesting if you have values that change at runtime:

import multiprocessing as mp
import random

val = random.random()

def simple_func():
    print(val)


if __name__ == '__main__':
    print('Before multiprocessing: ')
    simple_func()
    print('After multiprocessing:')
    p = mp.Process(target=simple_func)
    p.start()
    p.join()

On Windows, it would give an output like this:

Before multiprocessing:
0.16042209710776734
After multiprocessing:
0.9180213870647225

While on Linux, it gives an output like this:

Before multiprocessing:
0.28832424513226507
After multiprocessing:
0.28832424513226507

And this brings us to the last topic and the reason why I lost so much time when I had to port code written in Linux to work on Windows. A typical situation in which values change at runtime is when you are working with classes. Objects are meant to hold values; they are not static. So, what happens if you try to run a method of a class on a separate process? Let’s start with a straightforward task:

import multiprocessing as mp


class MyClass:
    def __init__(self, i):
        self.i = i

    def simple_method(self):
        print('This is a simple method')
        print(f'The stored value is: {self.i}')

    def mp_simple_method(self):
        self.p = mp.Process(target=self.simple_method)
        self.p.start()

    def wait(self):
        self.p.join()


if __name__ == '__main__':
    my_class = MyClass(1)
    my_class.mp_simple_method()
    my_class.wait()

The code works fine both on Linux and Windows. And this may happen for a lot of different scenarios, until one day you try to do something slightly more complicated, like writing or reading from a file:

import multiprocessing as mp


class MyClass:
    def __init__(self, i):
        self.i = i
        self.file = open(f'{i}.txt', 'w')

    def simple_method(self):
        print('This is a simple method')
        print(f'The stored value is: {self.i}')

    def mp_simple_method(self):
        self.p = mp.Process(target=self.simple_method)
        self.p.start()

    def wait(self):
        self.p.join()
        self.file.close()


if __name__ == '__main__':
    my_class = MyClass(1)
    my_class.mp_simple_method()
    my_class.wait()

On Linux, the code above works fine. On Windows (and Mac), however, there’ll be a very nasty error:

[...]
    ForkingPickler(file, protocol).dump(obj)
TypeError: cannot serialize '_io.TextIOWrapper' object

Pay attention to the fact that we don’t do anything with the file. We just open and store it as an attribute in the class. However, the error already points to an interesting feature. The way Spawning works is by pickling the entire object. Therefore, if we have a class or an attribute that is not pickable, we will not be able to start a child process with it.

And, for people working with hardware, most likely the communication with the device, in pretty much the same way that a file is non-pickable. It does not matter how much you try to make it multiprocessing safe by implementing locks or whatnot. The root problem is at a lower level.

Is there a way of solving it?

Sadly, there is no way of changing how processes start on Windows. You can, on the other hand, change how processes start on Linux. It would allow you to be sure your program also runs on Windows and Mac. We just need to add the following:

if __name__ == '__main__':
    mp.set_start_method('spawn')
    my_class = MyClass(1)
    my_class.mp_simple_method()
    my_class.wait()

By using set_start_method, the program will give the same error on Windows and Linux. Whether you need to add this line or not depends on what do you want to achieve.

So, if you ever encounter these discrepancies, you will have to re-think the design of your program. I had objects with non-pickable attributes, especially drivers for devices and ZMQ sockets.

Speed is another factor

Even though processes usually speed up the speed of a program by leveraging multiple cores on a computer, starting each process can be time-consuming. The fact that on Windows and Mac Python needs to pickle the objects to create child processes adds an overhead that may offset the benefits of running on separated processes. It is especially relevant when you have many small tasks to perform, instead of a couple of long-running ones.

Therefore, when using processes, improving the speed of the program is not a granted outcome. You should always benchmark your application to understand where and how different components can affect its behavior.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Transformers fall of cybertron для windows 10
  • Intel vga driver for windows 10 64 bit
  • Jeffrey richter programming applications for microsoft windows
  • Как скрыть панель быстрого доступа windows 10
  • Как создать локальную сеть между двумя компьютерами через кабель windows 10