- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了很多关于 Python 导入的“操作方法”文章(以及相关的 SO 问题),但是我正在努力弄清楚在大型 Python 项目中管理导入的“最佳实践”是什么。例如,假设我有一个如下所示的项目结构(这过于简单化了):
test/
packA/
subA/
__init__.py
sa1.py
sa2.py
__init__.py
a1.py
a2.py
packB/
b1.py
b2.py
main.py
packA/subA/sa1.py
我想从
packB/b1.py
导入代码.更一般地说,我希望能够在项目内的包/子包之间自由导入。
from packB import b1
from packB.subC.subD.subE import f1
from ...packB import b1
1 Câu trả lời
重新设计
您可以做的第一件事是重新设计您的包裹。说真的,直接来自 pep20 python zen :
Flat is better than nested.
from mypackage.module1.module2.module3 import foo
不应该存在。唯一一次您会看到嵌套在非常大且成熟的包中的模块,例如
django
。或
tensorfow
.即便如此,您会注意到它们的 api 仍然非常短(即
from django.test import TestCase
),即使它们的内部模块是复杂且嵌套的。通常,长且嵌套的导入是 Python 中不良包设计的信号。
flask
的标准。或
keras
图书馆。
keras
特别是 API 对我来说一直很直观。我经常去那个 repo 来激发我自己的编码实践。就个人而言,我尝试尽可能使用相对导入,因为我构建的大多数东西都很小(没有嵌套,或者一层嵌套)。但是我知道许多较大的项目选择使用绝对导入,因为它们有更多的嵌套层。
Conv2D
层它不是那么普遍:
from keras import Conv2D
,
from keras.layers.convolational import Conv2D
中间有一个很好的:
from keras.layers import Conv2D
.
keras
,您会注意到
Conv2D
类仍然包含在它自己的文件中
convolutional.py
.他们可以通过在
__init__.py
中添加以下行来降低导入的特异性。层模块:
from .convolutional import Conv2D
这允许您保留用于开发的包/模块结构,但保持客户端 api 简单直观。
PYTHONPATH
.这不是可扩展的,这意味着代码将无法在其他机器上运行或作为独立包而不编辑
PYTHONPATH
.最好有
setup.py
在每个包中并通过
pip
安装东西.
pip uninstall .
真的很烦人和
pip install .
每次您对包裹进行更改时,这就是为什么
pip
có
-e
旗帜:
pip install -e .
-e
flag 是一个可编辑的安装,它安装软件包,这样您对代码所做的任何更改都会立即生效,因此您不必保留
pip
进行更改后卸载和重新安装。
关于python - 如何在大型 python 项目中构建导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61759856/
Khi tôi làm điều này... import numpy as np ... Tôi có thể sử dụng nó nhưng... import pprint as pp ... không thể, vì tôi cần phải làm điều này... from pprint import
Đây là lần đầu tiên tôi thử sử dụng OpenCV với Python 3. Để cài đặt, tôi chỉ cần nhập "pip3 install opencv-python" vào terminal. Khi tôi làm điều này, tôi thấy trong Finder (tôi đang dùng máy Mac) rằng bên dưới
Nếu có một thư viện mà tôi sẽ sử dụng cho ít nhất hai phương pháp, thì có sự khác biệt nào về hiệu suất hoặc mức sử dụng bộ nhớ giữa các phương pháp sau không? Có sự khác biệt giữa from X import method1, method2 và import X, bởi vì trong imp
Tôi đang nhập một số hàm từ lodash và đồng nghiệp của tôi nói với tôi rằng tốt hơn là nhập từng hàm riêng lẻ thay vì nhập chúng theo nhóm. Phương pháp hiện tại: import {fn1, fn2, fn3} from 'lodash'; Phương pháp ưa thích:
Mối quan hệ giữa: phần tử import trong WSDL - và - phần tử import trong XML Schema là gì ... đặc biệt là mối quan hệ giữa thuộc tính location của phần tử trước và thuộc tính schemaLocation của phần tử sau
Tôi gặp sự cố khi nhập 'local_bitwidth' từ 'theano.configdefaults'. và hiển thị thông báo sau: ImportError
Tôi nhận thấy React có thể được nhập như thế này: import * as React from 'react'; ...hoặc như thế này: import React from 'react'; Lần nhập đầu tiên là React
Đối với dự án hiện tại, tôi phải sử dụng thông tin được cung cấp trong ma trận và thực hiện các phép tính toán học trên đó, cũng như hiển thị thông tin y tế/kết xuất bằng các hàm ITK/VTK. Về cơ bản, tôi phải sử dụng cả hai chương trình matlab và VTK/ITK theo cách (tôi đoán) 50/50
Khi tôi xem các ví dụ về pysqlite, có hai trường hợp sử dụng thư viện SQLite. từ sqlite3 nhập dbapi2 như sqlite3 và nhập sqlite3 Tại sao có hai cách để hỗ trợ s
Tôi sử dụng bản phân phối Anaconda Python: Python 2.7 x64 và Windows 7 SP1 x64 Ultimate. Khi tôi nhập matplotlib.pyplot, tôi nhận được
Catalog [Container] Xuất/nhập hình ảnh Xuất/nhập có nhãn không có nhãn, chỉnh sửa sau [Warehouse] Xuất/nhập hình ảnh
Tôi đang tìm cách nhập mô-đun để có thể chạy các tập lệnh từ cả thư mục con project/v0 và thư mục gốc project. /p> Cấu trúc tệp của tôi trong python 3.6 (đó là lý do tại sao không có tệp init) proj
Tôi thường được nghe nói rằng những điều sau đây là thói quen xấu. Lý do chính (hay ít nhất là tôi được nghe) cho lệnh from module import * là bạn có thể nhập thứ gì đó mà bạn không muốn nhập và nó có thể làm lu mờ một hàm hoặc lớp có tên tương tự trong một mô-đun khác. Tuy nhiên, Py
Tôi đã viết một wrapper nhỏ cho urllib (python3). Có đúng và an toàn khi nhập một mô-đun trong if không? nếu self.response_encoding == 'gzip': nhập gzip
Tôi đang tạo một trang web mới trong pimcore. Có cách nào để xuất/nhập toàn bộ dữ liệu của một trang web pimcore để tôi có thể xuất dữ liệu pimcore theo định dạng xml/csv, thực hiện những thay đổi cần thiết rồi nhập lại không? 1 Câu trả lời
Khi kiểm tra bố cục mô-đun sau trong Node JS, có vẻ như định nghĩa của lệnh xuất cục bộ luôn thay thế định nghĩa của lệnh xuất bên ngoài trong trường hợp xung đột tên (xem f1 trong B.js). A.js xuất const f1 = 'A' B.js e
Tôi đang gặp một số vấn đề với mã VBA được cho là nhập dữ liệu Excel vào cơ sở dữ liệu Access của tôi. Khi tôi chạy mã, tôi nhận được lỗi thời gian chạy "Lỗi thời gian chạy 438 Đối tượng không hỗ trợ thuộc tính hoặc phương thức này". Từ những lý thuyết khác của tôi
Tôi có một gói gọi là thành phần chứa những thứ như nút, bộ ba fader, áp phích, v.v. Trong lớp Button tôi đang thực hiện from elements import * Điều này hoạt động tốt, nhưng khi tôi thử print(p
Với kinh nghiệm lâu năm sử dụng Python, tôi đã gặp phải một vấn đề rất kỳ lạ. Trước hết tôi muốn nói rằng tôi muốn biết tại sao điều này lại xảy ra, chứ không phải cách thay đổi mã hoặc cách sửa lỗi, vì tôi cũng có thể làm được điều đó. Tôi đang sử dụng python2.7.3
Tôi đang cập nhật các gói của mình. Tuy nhiên, tôi đang gặp khó khăn với các phần phụ thuộc/nhập. Tôi sử dụng hai gói xung đột - ggplot2 và psych và hàm alpha của chúng và tất nhiên đối tượng của alpha ggplot2 khác với alpha psy
Tôi là một lập trình viên xuất sắc, rất giỏi!