Helpex - Trao đổi & giúp đỡ Đăng nhập
68

Tôi mới làm quen với Python và tôi đang bắt đầu một Dự án nhỏ, nhưng tôi có một số nghi ngờ về cách tổ chức các thư mục theo "Cách Python".

Tôi đang sử dụng PyDevtrong Môi trường phát triển của mình và khi tôi tạo dự án mới, một thư mục được tạo có tên làsrc

+ src

Bây giờ, trong PyDev, tôi có thể tạo Pydev ModulePyDev Package

Tôi cần tổ chức Dự án của mình theo cách sau:

+ Indicators
    - Moving_averages.py
    - Stochastics.py
+ Strategies
    - Moving_averages_cross.py
- example.py

Làm thế nào tôi có thể tổ chức việc này theo Mô-đun và Gói? Ý nghĩa của các mô-đun và gói là gì?

Trân trọng,

68 hữu ích 2 bình luận 61k xem chia sẻ
42

Gói về cơ bản là một thư mục chứa __init__.pytệp bên dưới và thường là một số Mô-đun, trong đó Mô-đun là một *.pytệp. Nó phải làm với importchủ yếu. Nếu bạn thêm __init__.pyvào các chỉ số, bạn có thể sử dụng:

from Indicators.Stochastics import *

hoặc là

from Indicators import Stochastics

Nhân tiện, tôi khuyên bạn nên giữ tên mô-đun / gói chữ thường. Nó không ảnh hưởng đến chức năng nhưng nó "pythonic" hơn.

42 hữu ích 0 bình luận chia sẻ
36

Từ phối cảnh hệ thống tệp, a modulelà tệp kết thúc bằng .pyvà a packagelà thư mục chứa modules và (lồng) packagelại. Python nhận ra một thư mục là packagenếu nó chứa một __init__.pytệp.

Một cấu trúc tập tin như thế

some/
    __init__.py
    foofoo.py
    thing/
        __init__.py
        barbar.py

định nghĩa package some, trong đó có một module foofoovà một gói lồng nhau thing, một lần nữa có một mô-đun barbar. Tuy nhiên, khi sử dụng các gói và mô-đun, bạn không thực sự phân biệt hai loại này:

import some

some.dothis() # dothis is defined in 'some/__init__.py'

import some.foofoo # <- module
import some.thing # <- package

Vui lòng làm theo PEP8 khi chọn đặt tên gói / mô-đun của bạn (nghĩa là sử dụng tên viết thường).

36 hữu ích 1 bình luận chia sẻ
26

Xem python-gói-mẫu

Cấu trúc thư mục

    .
    |-- bin
    |   `-- my_program
    |-- docs
    |   `-- doc.txt
    |-- my_program
    |   |-- data
    |   |   `-- some_data.html
    |   |-- __init__.py
    |   |-- submodule
    |   |   `-- __init__.py
    |   |-- helpers.py
    |-- tests
    |   |-- __init__.py
    |   |-- test_helpers.py
    |-- Makefile
    |-- CHANGES.txt
    |-- LICENSE.txt
    |-- README.md
    |-- requirements-dev.txt
    |-- requirements.txt
    `-- setup.py

mèo Makefile

    PYTHON=`which python`
    NAME=`python setup.py --name`


    all: check test source deb

    init:
        pip install -r requirements.txt --use-mirrors

    dist: source deb

    source:
        $(PYTHON) setup.py sdist

    deb:
        $(PYTHON) setup.py --command-packages=stdeb.command bdist_deb

    rpm:
        $(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall

    test:
        unit2 discover -s tests -t .
        python -mpytest weasyprint

    check:
        find . -name \*.py | grep -v "^test_" | xargs pylint --errors-only --reports=n
        # pep8
        # pyntch
        # pyflakes
        # pychecker
        # pymetrics

    clean:
        $(PYTHON) setup.py clean
        rm -rf build/ MANIFEST dist build my_program.egg-info deb_dist
        find . -name '*.pyc' -delete
26 hữu ích 3 bình luận chia sẻ
13

Bạn có thể muốn kiểm tra thư viện mẫu hiện đại. Nó cung cấp một cách để thiết lập một bố cục cơ bản thực sự tốt đẹp cho một dự án dẫn bạn qua một vài câu hỏi và cố gắng giúp bạn có được thứ gì đó có thể được phân phối khá dễ dàng.

http://pypi.python.org/pypi/modern-package-template

13 hữu ích 0 bình luận chia sẻ
7

Trước khi quyết định cấu trúc dự án, thật tốt khi tự hỏi mục đích của dự án sẽ là gì. Đây sẽ là một trong những phân tích? Một khái niệm đồ chơi bạn muốn điều tra? Một dự án đầy đủ thổi bạn dự định phân phối? Lượng nỗ lực bạn muốn đưa vào cấu trúc dự án của bạn sẽ khác nhau.

  • Nếu đó là một phân tích, tôi thích sử dụng máy tính xách tay ipython . Sổ ghi chép sẽ nắm bắt luồng suy nghĩ của bạn và bạn có thể thêm ghi chú trong đánh dấu vào mã của mình để tham khảo sau.
  • Nếu đó là một khái niệm đồ chơi mà bạn muốn điều tra, tôi tìm thấy một cách tiếp cận đơn giản, nhanh chóng để làm việc tốt nhất. Bạn muốn có thể nhanh chóng thực hiện khái niệm của mình để khám phá liệu nó có khả thi hay không và do đó đáng để dành nhiều thời gian hơn cho nó. Một phần trong triết lý của Python là 'Đừng cố gắng vì sự hoàn hảo bởi vì đủ tốt, đó thường là điều đó.' Bạn luôn có thể quay lại sau và cấu trúc dự án của mình theo cách tuân theo các thực tiễn kỹ thuật phần mềm tốt nhất.
  • Nếu bạn muốn cấu trúc dự án của mình để sau này bạn có thể phân phối nó và để nó mở rộng ra nhiều mô-đun, tôi khuyên bạn nên cấu trúc sau:

    projectname
     ├── MANIFEST.in
     ├── setup.py
     ├── README
     ├── .gitignore
     ├── .git
     ├── projectname_env
     └── projectname
         ├── __init__.py
         ├── subpackageone
            ├── __init__.py
            ├── second_module.py
            ├── tests
               └── test_second_module.py
            └── models
                └── model1
         ├── first_module.py   
         └── tests
             └── test_second_module.py

Các lý do chi tiết tại sao tôi thích cấu trúc này có trong bài đăng trên blog của tôi , nhưng ý chính cơ bản là thư mục cấp thấp hơn projectnamecó chứa dự án thực tế của bạn. Bên cạnh đó là tất cả các công cụ giúp quản lý (git) và gói (setup.py, MANIFEST.in).

7 hữu ích 0 bình luận chia sẻ
4

Một gói là một thư mục với một __init__.pytrong đó. Sự khác biệt từ một thư mục là bạn có thể nhập nó.

Không có "cách Python" mỗi se, nhưng bạn sẽ thấy rằng nên đặt tất cả các mô-đun của mình vào một gói với một tên liên quan đến dự án.

Ngoài ra, để làm theo hướng dẫn kiểu Python, PEP8, tên gói và tên mô-đun phải là chữ thường. Vì vậy, nếu chúng tôi giả định dự án có tên là "Botond Statistics" thì cấu trúc của bạn sẽ giống như thế này:

botondstats/
    indicators/
        moving_averages.py
        stochastics.py
    strategies/
        moving_averages_cross.py
    example.py

Sau đó, bạn sẽ tìm thấy lớp học Stochatics bằng cách làm

from botondstats.indicators.stochastics.Stochastics

(Có nhiều cách khác nhau để giữ cấu trúc nhưng làm cho nhập khẩu ngắn hơn, nhưng đó là một câu hỏi khác).

Bạn có thể đặt cấu trúc này bên dưới src/nếu bạn muốn, nhưng nó không cần thiết. Tôi chưa bao giờ làm. Thay vào đó tôi có một thư mục chính:

BotondStatistics/
    docs/
    botonstats/ # the above structure
    setup.py    # Distutils/distribute configuration for packaging.

Trong thư mục này tôi cũng thường có một virtualenv vì vậy tôi thực sự cũng có bin / lib / et al. Phát triển thường được thực hiện bằng cách chạy

./bin/python setup.py tests

Khi tôi sử dụng trình chạy thử Distrubute để chạy thử nghiệm.

Đó là cách tôi làm điều đó. :-)

4 hữu ích 0 bình luận chia sẻ
3

Hãy thử python_boilerplate_template:

https://pypi.python.org/pypi/python_boilerplate_template

3 hữu ích 0 bình luận chia sẻ
1

Các cookiecutterdự án đã được audreyrbao gồm một số dự án mẫu Python:

Gói sử dụng một ~/.cookiecutterrctệp duy nhất để tạo các mẫu dự án tùy chỉnh bằng Python, Java, JS và các ngôn ngữ khác.

Ví dụ: mẫu Python tương thích với PyPI:

Làm cách nào để tổ chức Dự án Python?

1 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python pydev project-structure project-organization , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading