Why __init__.py File is Used in Python Projects | 2MinutesPy

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 ธ.ค. 2024

ความคิดเห็น • 177

  • @catbeatzzz5693
    @catbeatzzz5693 ปีที่แล้ว +179

    I love finding hidden gems like these on TH-cam

  • @nigh_anxiety
    @nigh_anxiety ปีที่แล้ว +40

    Important detail that mixes people up a lot (and results in a lot of repeat questions on StackOverflow) --- If the scripts in your package rely on elements of other files in the same package via imports, they MUST use Relative imports.
    However, if you also have a main script or test script within your package that you want to run directly (as opposed to having an external main.py import your package), then that script within the package must use Absolute imports. Python determines whether or not it should be using relative or absolute imports based on whether or not the script it is processing is in a package, and the top-level script (the one invoked with 'python my_script.py') is never considered to be in a package while it is interpreted.
    If you insist on having scripts in your package that you want to run directly, put the intra-package imports in a try/except block, where you first try the relative import, catch an ImportError, and then try absolute imports.

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +6

      I must appreciate, that you took the time to explain handling imports within a package.

    • @phovos
      @phovos ปีที่แล้ว

      I just had a 30-minute chat with GPT by pasting your comment and "huh?" --learning about asyncio.run(()) and namespace, now, haha.

    • @Gismo359
      @Gismo359 11 หลายเดือนก่อน +4

      BS, you will be completely fine if you just use absolute imports. Relative imports only save you a tiny bit of time when moving modules to different packages. Otherwise, it's almost entirely up to personal preference.

    • @commentmachine1457
      @commentmachine1457 10 หลายเดือนก่อน

      not really about the "MUST use relative imports statement within the package". According to PEP 8, "Absolute imports are recommended, as they are usually more readable and tend to be better behaved". Unless absolute import is very verbose (which should never occur in the first place as you should never yank something really deep out of another sub-package. Instead, you should have an API init script for the package and only import the ones from its init script). You almost should always use absolute import, because it explicitly states where the object comes from. This also makes it easier to move sub-packages around.

  • @lienjerry7370
    @lienjerry7370 ปีที่แล้ว +6

    __init__.py currently can be used to expose class or function. Taking the example in the video, if you want to expose the function "say_hello" in "greeting.py" to "my_package" level (i.e. in other arbitrary script, you want to "import say_hello from my_package"), you can write the line: "from .greeting import say_hello" in "__init__.py" to achieve this goal.

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +1

      Yeah, you can use directory-level import also to access say_hello function.

  • @HansLemurson
    @HansLemurson ปีที่แล้ว +9

    We're __init__ to win-it!

  • @leez9753
    @leez9753 ปีที่แล้ว +20

    for some reason this showed up in my feed, good stuff my guy. keep it up

  • @dad30189
    @dad30189 ปีที่แล้ว +11

    I just found your channel from the TH-cam recommendations. The 2 minute videos are a great idea!

  • @patryk9073
    @patryk9073 ปีที่แล้ว +23

    I do a similar import without __init__.py file and it works fine. What is an example of import which wouldn't work without that empty file?

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +6

      Yeah, from Python 3.3, the namespace package won't need __init__.py file to import modules. But if you want to create a regular package, you'd include __init__.py file in your directory to make a better and maintainable package.
      The empty __init__.py file can be used to mark a directory as a package, which allows importing relative modules within the same package.

    • @chessfreak8813
      @chessfreak8813 10 หลายเดือนก่อน +2

      @@2MinutesPy yes i also tried

  • @wamimuswamimus3496
    @wamimuswamimus3496 10 หลายเดือนก่อน +8

    explanation is clear concise to the point.. no redundancy. love it.

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน +1

      Thanks bruh

  • @dheeraj3945
    @dheeraj3945 9 หลายเดือนก่อน +3

    I can't thank you enough for this. This is the best explanation ever. Thank you very much

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน

      Glad it was helpful!

  • @MissingTricks
    @MissingTricks 11 หลายเดือนก่อน +3

    Absolutely hidden information, I couldn’t found out this in udemy courses. Thank you🎉

    • @2MinutesPy
      @2MinutesPy  11 หลายเดือนก่อน

      Glad it was helpful!

  • @moralfuxery
    @moralfuxery ปีที่แล้ว +4

    Omg what an amazing video to come across while in my first weeks of using python. 👍👍👍

  • @有賀_竜樹
    @有賀_竜樹 ปีที่แล้ว +19

    So it's basically Python's way of declaring namespaces with optional super constructor functionality. That's what I understood.
    Great vid btw! :)

    • @Dude29
      @Dude29 9 หลายเดือนก่อน +1

      Exactly!

  • @arvindh4327
    @arvindh4327 ปีที่แล้ว +4

    Also can help in abstraction and encapsulation(__all__) too

  • @Kothwalashivakumar
    @Kothwalashivakumar ปีที่แล้ว +2

    Greatly explained in the most simplistic way possible. Thanks

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว

      Glad it was helpful!

  • @vasutke1187
    @vasutke1187 ปีที่แล้ว +6

    High clarity, Excellent Presentation and ultimate communication very interesting video. Thanks and Regards.

  • @quangnhatle2512
    @quangnhatle2512 ปีที่แล้ว +15

    Somehow saw your vid by youtube recommended algorithm! I think I like the concept of explaining something really important and widely used in a short amount of time like 2-minutes! It was really good, maybe if more complex topics need to be explained then I think you dont need to keep a 2-min constraint. It can be extended up to 10min but not more than 10min. Maybe just keep it compact like this. Anyways great work !

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +2

      Glad you liked it and thanks for valuable suggestion.

    • @circulartext
      @circulartext ปีที่แล้ว +2

      facts

    • @1LY4x8s96r
      @1LY4x8s96r 10 หลายเดือนก่อน

      Nah. If he does that he can fall for the temptation to include filling material.

  • @epokal1
    @epokal1 ปีที่แล้ว +14

    This needs so much more engagement, also i might comment another just for engagement purposes

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +4

      Thanks for support.

    • @Aditya-ne4lk
      @Aditya-ne4lk 10 หลายเดือนก่อน

      no. i want to gatekeep this

  • @taiman9423
    @taiman9423 ปีที่แล้ว +5

    best one yet

  • @bide7603
    @bide7603 10 หลายเดือนก่อน +97

    Pretty sure this is an ai video

    • @bivashy
      @bivashy 9 หลายเดือนก่อน +4

      nah

    • @alias77799
      @alias77799 8 หลายเดือนก่อน +1

      Yep

    • @leoldqv
      @leoldqv 7 หลายเดือนก่อน +4

      It was still helpful

  • @Fizzulko
    @Fizzulko ปีที่แล้ว +15

    Great video, keep making new ones. The way you explain things in 2 minutes is amazing ! Great work !

  • @HamzaDestinyKassim
    @HamzaDestinyKassim 2 หลายเดือนก่อน +1

    Thanks boss
    More please
    More

    • @2MinutesPy
      @2MinutesPy  2 หลายเดือนก่อน

      Sure brother

  • @SS-bo9yt
    @SS-bo9yt 10 หลายเดือนก่อน +2

    Wow new format for me, thanks

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Glad to hear it!

  • @markmilan57
    @markmilan57 ปีที่แล้ว +11

    Great startups! Keep on making more videos.

  • @tonyyin8735
    @tonyyin8735 ปีที่แล้ว +1

    Great video, short and concise!

  • @Romogi
    @Romogi 9 หลายเดือนก่อน +2

    Python is great. Burning things is greater.

  • @jenniferstern324
    @jenniferstern324 9 หลายเดือนก่อน +2

    Hi 😅 I'm a bit confused about one thing, sometimes I do "from math import sin, pi", so that I could use it as "sin(pi)", instead of "math.sin(pi)".
    Your example seems a bit different to me, as it doesn't import the function "say_hello()", but the whole python greetings.py file.
    Is there a way to only import the "say_hello()" function without needing to suffix it with "greetings.say_hello()"?
    (Sorry I'm a newb 😂)

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน +1

      Yes you can do it. You just need to import only the say_hello() function from the greetings module.
      Like that👇
      from my_package.greetings import say_hello
      Now you can directly call the say_hello() function. I hope that'll help you and sorry for late comment.

  • @goofballbiscuits3647
    @goofballbiscuits3647 10 หลายเดือนก่อน +1

    Awesome video!

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน +1

      Thanks!

  • @baderhelsing6133
    @baderhelsing6133 11 หลายเดือนก่อน +1

    Almost a day of searching why I'm getting "No module error" and I'm just missing init file for the imports folder, Udemy and coursera is missing these in their python selenium courses. Great video brother, you save my ass.

    • @2MinutesPy
      @2MinutesPy  11 หลายเดือนก่อน

      Thanks

  • @alpoo3627
    @alpoo3627 ปีที่แล้ว +1

    Thanks for your video!

  • @HiltonFernandes
    @HiltonFernandes 9 หลายเดือนก่อน

    Great video !
    Congrats !

    • @HiltonFernandes
      @HiltonFernandes 9 หลายเดือนก่อน

      If you don't mind, it would be nice to have another video explaining the initialization that __init__.py can do.

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน +1

      Thank you very much!

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน +1

      Sure, very soon

  • @NguyễnLong-o1t
    @NguyễnLong-o1t หลายเดือนก่อน +1

    Thank you ❤

    • @2MinutesPy
      @2MinutesPy  หลายเดือนก่อน

      Always welcome

  • @enkhboldnymdorj2790
    @enkhboldnymdorj2790 10 หลายเดือนก่อน

    So surprisingly, its as same as index.ts or index.js in js packages.

  • @GiovanniDeCillis
    @GiovanniDeCillis 9 หลายเดือนก่อน +1

    I guess a tree structure diagram would help. But great video, straight to the point.

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน

      Thanks

  • @vasutke1187
    @vasutke1187 ปีที่แล้ว +3

    Sir,
    If possible Simultaneous video on SQL. Regards.

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +1

      As soon as possible

  • @luuu_na35
    @luuu_na35 ปีที่แล้ว

    Great! I can make my own package now.

  • @abhisheknautiyal7956
    @abhisheknautiyal7956 10 หลายเดือนก่อน

    Great video. I recommend making a playlist for easy access to all your related video.

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Thank you, I will

  • @oliviarojas7023
    @oliviarojas7023 10 หลายเดือนก่อน

    Just BTW. . Use namespace . . Pep 420 . . __init__.Py is not used after python 3.3 for package imports over namespace. . It has some functionality, but a pretty old change.

  • @kunalsoni7681
    @kunalsoni7681 ปีที่แล้ว +2

    this video made me very clear about the python package concept with a practical example

  • @shavebunny
    @shavebunny 9 หลายเดือนก่อน

    Nice init.py right there, init.py?

  • @prof-caio-jannuzzi
    @prof-caio-jannuzzi ปีที่แล้ว +1

    Que top! Curti esse canal

  • @freepythoncode
    @freepythoncode ปีที่แล้ว +1

    Thank you so much 🙂❤

  • @epokal1
    @epokal1 ปีที่แล้ว +3

    I love this

  • @dweepverma3662
    @dweepverma3662 9 หลายเดือนก่อน

    Loved it

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน

      Thanks

  • @circulartext
    @circulartext ปีที่แล้ว +1

    nice lesson

  • @ameyadali1768
    @ameyadali1768 ปีที่แล้ว

    Underrated

  • @JohnintheTyranny
    @JohnintheTyranny 6 หลายเดือนก่อน

    Doesn't it do the same thing if you create a class in any other file?

  • @onepun9583
    @onepun9583 10 หลายเดือนก่อน

    what's the full syntax to implement it?

  • @flosrv3194
    @flosrv3194 8 หลายเดือนก่อน +1

    I always try it and nothing works for my projects

  • @oliveselow-bw3py
    @oliveselow-bw3py ปีที่แล้ว

    Like it..!

  • @Arvine_Lyrics
    @Arvine_Lyrics 9 หลายเดือนก่อน

    It's used mainly to prevent circular imports😊

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน

      Nowadays, this file is not needed as Python is advancing but yeah, you can prevent circular imports within your projects using this file.

  • @khanbasharat
    @khanbasharat 10 หลายเดือนก่อน

    New subscriber here!

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Welcome!!

  • @uuuummm9
    @uuuummm9 10 หลายเดือนก่อน

    I did not become more clear at all. Sometimes importing works and sometimes it does not. It would be more useful to explain how python interpreter searches for the packages and makes them available for importing.
    I have a code base that works in 3 ways: as a FastApi app, as pytest testing the web app and also as part of a databricks job. I was able to make first two cases to work more or kess clean (although I had to follow a particular folder structure and if I change it everything breaks, so I cannot say I understand how it works). And for databricks i ended up with adding some ugly "sys.path.add" or like that to make it work. 4 years of working with python and those init files are still a mystery for me.

  • @venil82
    @venil82 10 หลายเดือนก่อน +4

    These double underlined magic methods is such a terrible design

    • @leoldqv
      @leoldqv 7 หลายเดือนก่อน

      Why?

  • @vishalvishwakarma4389
    @vishalvishwakarma4389 11 หลายเดือนก่อน

    This works even when there is no init.py file

    • @2MinutesPy
      @2MinutesPy  11 หลายเดือนก่อน +1

      Yeah, if you have a Python version above 3.3

  • @Jakub1989YTb
    @Jakub1989YTb 5 หลายเดือนก่อน

    Ever heard of namespaces?

  • @kerimalpalt
    @kerimalpalt ปีที่แล้ว +1

    Because the person who wrote it is from South London

    • @emman100
      @emman100 ปีที่แล้ว +1

      🤣💀

  • @IcyyDicy
    @IcyyDicy ปีที่แล้ว +5

    This feels AI generated
    The voice has weird intonation

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +1

      Sorry for inconvenience caused

  • @Carhill
    @Carhill ปีที่แล้ว +3

    Narration is clearly text-to-speech, but the dialogue itself feels like it was spat out by a LLM.
    Awful.

  • @kuljeetkumar4657
    @kuljeetkumar4657 10 หลายเดือนก่อน

    Content is top notch in 2 mins. Ads take 30 seconds. That is the only bad part.

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Thanks!

  • @murphygreen8484
    @murphygreen8484 11 หลายเดือนก่อน

    Isn't this no longer needed as of python 3.3?

    • @2MinutesPy
      @2MinutesPy  11 หลายเดือนก่อน

      Yeah, you're right but a developer should be aware of this.

  • @forlorn4523
    @forlorn4523 5 หลายเดือนก่อน +1

    I am able import methods without creating the init file

    • @2MinutesPy
      @2MinutesPy  5 หลายเดือนก่อน

      Yes, you can in newer versions of Python. But not putting __init__.py file sometimes cause circular imports error within modules.

  • @VahidOnTheMove
    @VahidOnTheMove ปีที่แล้ว +2

    Well, how this video is useful that's just basically says put an __init__.py!? You can literally get the info on the internet in less than 2 mins. I need to know what I can do by adding lines of codes in __init__

  • @kahvuongng2701
    @kahvuongng2701 5 หลายเดือนก่อน

    ty

    • @2MinutesPy
      @2MinutesPy  5 หลายเดือนก่อน

      💛💛

  • @Thekingslayer-ig5se
    @Thekingslayer-ig5se 8 หลายเดือนก่อน

    Man your an icon

  • @ЕвгенийКрасилов-о9о
    @ЕвгенийКрасилов-о9о 10 หลายเดือนก่อน

    Emmm... That "init" shit never works for me... How tf any python file outside "my_package" can know about that package? It's not even in sys.path... I'm really confused. EVERYTHING I try to make sense of this init file just never works. For me its just a garbage.
    Personally I just create and activate venv in ".venv" folder and inside this folder create file "any_name.pth" with "../" content. So I have root directory with ".venv" subdirectory. And when I activate my venv, my root folder is inside my sys.path. so, in project, I can use absolute imports as I want. And if I want to use it as a package - I just create pyproject.toml file, configure it and use pip install with path\to\ package. And that's much better, because you can do the same thing even using git repos...
    I don't know wtf is __init__.py... Just a garbage

  • @africknchickn_YT
    @africknchickn_YT 10 หลายเดือนก่อน +2

    AI generated?

  • @fqidz
    @fqidz ปีที่แล้ว +3

    i cant tell if the voice is ai or a real person

    • @alex11943
      @alex11943 ปีที่แล้ว +1

      1:11 is a dead giveaway that it's AI voice. But at least the explanation is good

  • @kvnptl4400
    @kvnptl4400 10 หลายเดือนก่อน

    Sometimes For me it's 1MinutePy

  • @vladhaidukkk-learning
    @vladhaidukkk-learning 10 หลายเดือนก่อน

    As far as I know, this file became optional after Python 3.3

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Yeah

  • @feazysil2707
    @feazysil2707 10 หลายเดือนก่อน

    You can't make a 2:40 video with 16s intro everyone that clicked this video know you are talking about init no need to state it

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Noted

  • @RocketPropelledWombat
    @RocketPropelledWombat 10 หลายเดือนก่อน

    The classics....

  • @AnweshAdhikari
    @AnweshAdhikari 11 หลายเดือนก่อน

  • @s1mo
    @s1mo ปีที่แล้ว

    bri'ish people when they write the __init__.py file

  • @onehotseat
    @onehotseat 10 หลายเดือนก่อน

    Great vid, only issue is your pronunciation of init. It's "i nit", with emphasis on the "nit". Not "in it" with emphasis on the "in".

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Noted and thanks

  • @jamesford3282
    @jamesford3282 2 หลายเดือนก่อน +1

    this is not true, You can still import functions and classes without __init__.py

    • @2MinutesPy
      @2MinutesPy  หลายเดือนก่อน

      Yeah, because of namespace. This is about in the context of regular packages in Python

  • @gaot5281
    @gaot5281 11 หลายเดือนก่อน

    If I put the file test.py in a folder it did not work. The error is "ModuleNotFoundError: No module named "my_package"

  • @udonwadon
    @udonwadon 10 หลายเดือนก่อน

    the amount of quirks in python that is senseless makes me prefer ruby.

  • @carlosmspk
    @carlosmspk 10 หลายเดือนก่อน

    Except python no longer needs __init__.py and works perfectly fine without it. I was hoping this video would address this :(

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Yeah and sorry

  • @NyiajNtajVaj
    @NyiajNtajVaj 9 หลายเดือนก่อน

    It’s a module

  • @HussinJaafari
    @HussinJaafari 10 หลายเดือนก่อน

    Since 3.9, you no more need the __init__.py anymore

    • @2MinutesPy
      @2MinutesPy  10 หลายเดือนก่อน

      Yeah

  • @TeraBaap-pc1dd
    @TeraBaap-pc1dd ปีที่แล้ว +1

    Susbscribed on 999
    The next one would be 1k directly

  • @tyrojames9937
    @tyrojames9937 11 หลายเดือนก่อน

    😁😁

  • @royk7712
    @royk7712 ปีที่แล้ว

    why because the brit say it often like "init bruv?"
    jk

  • @ifstatementifstatement2704
    @ifstatementifstatement2704 ปีที่แล้ว +1

    Haven’t used it yet but from what I’ve seen it seems to be a pretentious c++ header file wannabe.

    • @spatialnasir
      @spatialnasir 10 หลายเดือนก่อน

      That escalated quickly

  • @mihirjog2707
    @mihirjog2707 9 หลายเดือนก่อน

    That's useful, init?

  • @zeez7777
    @zeez7777 9 หลายเดือนก่อน

    Man i really miss the times when i didnt have to listen to these soulless AI voices that completely distract from the actual thing being discussed

  • @SpectrumX93
    @SpectrumX93 10 หลายเดือนก่อน

    🙄 😅

  • @RyanWaite28
    @RyanWaite28 ปีที่แล้ว

    I like Node.JS better 🤷🏾‍♂️

    • @2MinutesPy
      @2MinutesPy  ปีที่แล้ว +1

      No worries, you can try Python also sometimes

  • @marcopulido3087
    @marcopulido3087 10 หลายเดือนก่อน

    __init__.py is a kind of gluon 😂

  • @joseph2625
    @joseph2625 10 หลายเดือนก่อน

    PEP420 was drafted over a decade ago. Are you just pretending that it doesn't exist?

    • @Parodyyy
      @Parodyyy 7 หลายเดือนก่อน

      What?

  • @maudjito
    @maudjito 9 หลายเดือนก่อน +2

    Hate the AI voice

  • @schuylergood4897
    @schuylergood4897 ปีที่แล้ว

    This looks AI generated

  • @pooria10001
    @pooria10001 7 หลายเดือนก่อน

    Why should we add an additional and ridiculous file called __init__.py in every folder in the project to recognize a folder as a package ?!!!!
    It's really ridiculous! STUPID PYTHON.

  • @wagbagsag
    @wagbagsag ปีที่แล้ว +1

    Text to speech. Bleh

    • @susugar3338
      @susugar3338 ปีที่แล้ว +1

      It's not a big problem, man. At least it's easy for my bad English to understand more than native English voice.

    • @wagbagsag
      @wagbagsag ปีที่แล้ว +4

      In general I agree! Not everyone is cut out be a narrator. But the information density of this content is so low that it feels straight out of chat gpt, and the text-to-speech emphasizes that appearance.

  • @komodo-dragon
    @komodo-dragon 9 หลายเดือนก่อน

    Bc python is british

    • @2MinutesPy
      @2MinutesPy  9 หลายเดือนก่อน

      😁