How to structure python packages without repeating top level name for import

后端 未结 3 1351
执笔经年
执笔经年 2020-12-13 04:58

I\'m brand new at python package management, and surely have done something wrong. I was encouraged to create a directory structure as follows:

bagoftricks
         


        
3条回答
  •  隐瞒了意图╮
    2020-12-13 05:22

    The first level "bagoftricks" is fine. That's just the name of your "project" so to speak. In the you have a setup.py, and other files that tell the packaging systems what they need to know.

    You can then have the code directly in this module, or in a src directory. You can even go as far as just having this structure:

    bagoftricks
    ├── bagoftricks.py
    ├── README.md
    └── setup.py
    

    But I would not recommend that, mostly because you might want to reorganize things later, and it's easier if you already have a "proper" package. Also most people, tools and docs assume you have a package, so it's easier.

    So the minimum would be:

    bagoftricks
    ├── bagoftricks
    │   └── __init__.py
    ├── README.md
    └── setup.py
    

    With __init__.py containing the functions you want to import. You then use these functions like this:

    from bagoftricks import levenshtein, anotherfunction
    

    Once that __init__.py becomes too big, you want to split it up in several modules, giving you something like this:

    bagoftricks
    ├── bagoftricks
    │   ├── __init__.py
    │   ├── anothermodule.py
    │   └── levenshtein.py
    ├── README.md
    └── setup.py
    

    Your __init__.py should then import the functions from the various modules:

    from bagoftricks.levenshtein import levenshtein
    from bagoftricks.anothermodule import anotherfunction
    

    And then you can still use them like like you did before.

提交回复
热议问题