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,09521027




                    3,09521027
























                        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

                            20518




                            20518






















                                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




















































                                        Thanks for contributing an answer to Stack Overflow!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.





                                        Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                        Please pay close attention to the following guidance:


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        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







                                        這個網誌中的熱門文章

                                        Xamarin.form Move up view when keyboard appear

                                        Post-Redirect-Get with Spring WebFlux and Thymeleaf

                                        Anylogic : not able to use stopDelay()