Creating a submodule that relies on a properties file









up vote
0
down vote

favorite












I have the following structure



main.py
module/
properties.yaml
file.py


file.py relevant code:



def read_properties():
with open('properties.yaml') as file:
properties = yaml.load(file)


main.py relevant code:



from module import file
file.read_properties()


When read_properties() is called within main.py, I get the following error: FileNotFoundError: [Errno 2] No such file or directory: 'properties.yaml'



What is the recommended way of allowing my module to access the properties file even when imported?










share|improve this question

























    up vote
    0
    down vote

    favorite












    I have the following structure



    main.py
    module/
    properties.yaml
    file.py


    file.py relevant code:



    def read_properties():
    with open('properties.yaml') as file:
    properties = yaml.load(file)


    main.py relevant code:



    from module import file
    file.read_properties()


    When read_properties() is called within main.py, I get the following error: FileNotFoundError: [Errno 2] No such file or directory: 'properties.yaml'



    What is the recommended way of allowing my module to access the properties file even when imported?










    share|improve this question























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I have the following structure



      main.py
      module/
      properties.yaml
      file.py


      file.py relevant code:



      def read_properties():
      with open('properties.yaml') as file:
      properties = yaml.load(file)


      main.py relevant code:



      from module import file
      file.read_properties()


      When read_properties() is called within main.py, I get the following error: FileNotFoundError: [Errno 2] No such file or directory: 'properties.yaml'



      What is the recommended way of allowing my module to access the properties file even when imported?










      share|improve this question













      I have the following structure



      main.py
      module/
      properties.yaml
      file.py


      file.py relevant code:



      def read_properties():
      with open('properties.yaml') as file:
      properties = yaml.load(file)


      main.py relevant code:



      from module import file
      file.read_properties()


      When read_properties() is called within main.py, I get the following error: FileNotFoundError: [Errno 2] No such file or directory: 'properties.yaml'



      What is the recommended way of allowing my module to access the properties file even when imported?







      python import python-import python-3.7






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 9 at 19:45









      Dominic Roy-Stang

      13




      13






















          3 Answers
          3






          active

          oldest

          votes

















          up vote
          0
          down vote













          Provide the absolute path to properties.yaml:



          with open('/Users/You/Some/Path/properties.yaml') as file:





          share|improve this answer



























            up vote
            0
            down vote













            As JacobIRR said in his answer, it is best to use the absolute path to the file. I use the os module to construct the absolute path based on the current working directory. So for your code it would be something like:



            import os
            working_directory = os.path.dirname(__file__)
            properties_file = os.path.join(working_directory, 'module', 'properties.yaml')





            share|improve this answer



























              up vote
              0
              down vote



              accepted










              Based on answers from @JacobIRR and @BigGerman



              I ended up using pathlib instead of os, but the logic is the same.
              Here is the syntax with pathlib for those interested:



              in file.py:



              from pathlib import Path
              properties_file = Path(__file__).resolve().parent/"properties.yaml"
              with open(properties_file) as file:
              properties = yaml.load(file)





              share|improve this answer






















                Your Answer






                StackExchange.ifUsing("editor", function ()
                StackExchange.using("externalEditor", function ()
                StackExchange.using("snippets", function ()
                StackExchange.snippets.init();
                );
                );
                , "code-snippets");

                StackExchange.ready(function()
                var channelOptions =
                tags: "".split(" "),
                id: "1"
                ;
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function()
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled)
                StackExchange.using("snippets", function()
                createEditor();
                );

                else
                createEditor();

                );

                function createEditor()
                StackExchange.prepareEditor(
                heartbeatType: 'answer',
                convertImagesToLinks: true,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: 10,
                bindNavPrevention: true,
                postfix: "",
                imageUploader:
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                ,
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                );



                );













                 

                draft saved


                draft discarded


















                StackExchange.ready(
                function ()
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53232352%2fcreating-a-submodule-that-relies-on-a-properties-file%23new-answer', 'question_page');

                );

                Post as a guest















                Required, but never shown

























                3 Answers
                3






                active

                oldest

                votes








                3 Answers
                3






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes








                up vote
                0
                down vote













                Provide the absolute path to properties.yaml:



                with open('/Users/You/Some/Path/properties.yaml') as file:





                share|improve this answer
























                  up vote
                  0
                  down vote













                  Provide the absolute path to properties.yaml:



                  with open('/Users/You/Some/Path/properties.yaml') as file:





                  share|improve this answer






















                    up vote
                    0
                    down vote










                    up vote
                    0
                    down vote









                    Provide the absolute path to properties.yaml:



                    with open('/Users/You/Some/Path/properties.yaml') as file:





                    share|improve this answer












                    Provide the absolute path to properties.yaml:



                    with open('/Users/You/Some/Path/properties.yaml') as file:






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Nov 9 at 19:54









                    JacobIRR

                    3,03711026




                    3,03711026






















                        up vote
                        0
                        down vote













                        As JacobIRR said in his answer, it is best to use the absolute path to the file. I use the os module to construct the absolute path based on the current working directory. So for your code it would be something like:



                        import os
                        working_directory = os.path.dirname(__file__)
                        properties_file = os.path.join(working_directory, 'module', 'properties.yaml')





                        share|improve this answer
























                          up vote
                          0
                          down vote













                          As JacobIRR said in his answer, it is best to use the absolute path to the file. I use the os module to construct the absolute path based on the current working directory. So for your code it would be something like:



                          import os
                          working_directory = os.path.dirname(__file__)
                          properties_file = os.path.join(working_directory, 'module', 'properties.yaml')





                          share|improve this answer






















                            up vote
                            0
                            down vote










                            up vote
                            0
                            down vote









                            As JacobIRR said in his answer, it is best to use the absolute path to the file. I use the os module to construct the absolute path based on the current working directory. So for your code it would be something like:



                            import os
                            working_directory = os.path.dirname(__file__)
                            properties_file = os.path.join(working_directory, 'module', 'properties.yaml')





                            share|improve this answer












                            As JacobIRR said in his answer, it is best to use the absolute path to the file. I use the os module to construct the absolute path based on the current working directory. So for your code it would be something like:



                            import os
                            working_directory = os.path.dirname(__file__)
                            properties_file = os.path.join(working_directory, 'module', 'properties.yaml')






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Nov 9 at 20:00









                            BigGerman

                            1858




                            1858




















                                up vote
                                0
                                down vote



                                accepted










                                Based on answers from @JacobIRR and @BigGerman



                                I ended up using pathlib instead of os, but the logic is the same.
                                Here is the syntax with pathlib for those interested:



                                in file.py:



                                from pathlib import Path
                                properties_file = Path(__file__).resolve().parent/"properties.yaml"
                                with open(properties_file) as file:
                                properties = yaml.load(file)





                                share|improve this answer


























                                  up vote
                                  0
                                  down vote



                                  accepted










                                  Based on answers from @JacobIRR and @BigGerman



                                  I ended up using pathlib instead of os, but the logic is the same.
                                  Here is the syntax with pathlib for those interested:



                                  in file.py:



                                  from pathlib import Path
                                  properties_file = Path(__file__).resolve().parent/"properties.yaml"
                                  with open(properties_file) as file:
                                  properties = yaml.load(file)





                                  share|improve this answer
























                                    up vote
                                    0
                                    down vote



                                    accepted







                                    up vote
                                    0
                                    down vote



                                    accepted






                                    Based on answers from @JacobIRR and @BigGerman



                                    I ended up using pathlib instead of os, but the logic is the same.
                                    Here is the syntax with pathlib for those interested:



                                    in file.py:



                                    from pathlib import Path
                                    properties_file = Path(__file__).resolve().parent/"properties.yaml"
                                    with open(properties_file) as file:
                                    properties = yaml.load(file)





                                    share|improve this answer














                                    Based on answers from @JacobIRR and @BigGerman



                                    I ended up using pathlib instead of os, but the logic is the same.
                                    Here is the syntax with pathlib for those interested:



                                    in file.py:



                                    from pathlib import Path
                                    properties_file = Path(__file__).resolve().parent/"properties.yaml"
                                    with open(properties_file) as file:
                                    properties = yaml.load(file)






                                    share|improve this answer














                                    share|improve this answer



                                    share|improve this answer








                                    edited Nov 9 at 20:26

























                                    answered Nov 9 at 20:17









                                    Dominic Roy-Stang

                                    13




                                    13



























                                         

                                        draft saved


                                        draft discarded















































                                         


                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function ()
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53232352%2fcreating-a-submodule-that-relies-on-a-properties-file%23new-answer', 'question_page');

                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Darth Vader #20

                                        How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

                                        Ondo