Python: 在子包中导入模型
Python: import models in sub package
我是 Python 的新手,我一直在为退出导入而苦苦挣扎。我无法完全理解这个概念。我在 ruby 中有经验,其中导入概念完全不同。
1.情况
我有这个包裹
├── convortal
│ ├── dbconf.yaml
│ ├── helpers.py
│ ├── __init__.py
│ ├── models
│ │ ├── company.py
│ │ ├── country.py
│ │ ├── ez_key.py
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── product_function.py
│ │ ├── __pycache__
│ │ │ ├── company.cpython-34.pyc
│ │ │ └── __init__.cpython-34.pyc
│ │ └── traveler_profile.py
│ └── __pycache__
│ └── __init__.cpython-34.pyc
├── README.md
├── requirements.txt
└── setup.py
convortal/__init___.py
import sys
from convortal.models import *
import convortal.helpers as hp
from dbconn import CtrlSession
from sqlalchemy import desc
# DECLARATIONS FOR SETUP.PY
APP_NAME = 'convortal'
__versionnum__ = ('0','0','1')
APP_VERSION = '.'.join([i for i in __versionnum__])
def convortal(argv):
....(code to read file and update DB)
convortal/models/__init__.py
__all__ = [
'Company',
'Country',
'EzKey',
'ProductFunction',
'TravelerProfile',
]
from dbconn import DBconn
from convortal.models.company import Company
from convortal.models.country import Country
from convortal.models.ez_key import EzKey
from convortal.models.product_function import ProductFunction
from convortal.models.traveler_profile import TravelerProfile
# create a connection to the DB
conn = DBconn('PROD')
# instantiate a Base object with this connection
Base = conn.Base()
公司型号:convortal/models/company.py
import convortal
from sqlalchemy import Table, Column, Integer, ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship
from models import Base
class Company(Base):
...company table with autoload
我想达到的目标
我正在尝试创建一个可以导入的包,以便将此代码与检查目录、收集用户文件并使用此包更新、创建或停用此用户的例程一起使用。
我也在尝试从命令行测试这个,像这样执行应用程序
(venv) ➜ convortal git:(master) ✗ python convortal/__init__.py
__init__.py
有 if 语句
if __name__ == '__main__':
convortal(sys.argv[1:])
运行 此命令应退出应用程序并显示一条消息,其中的帮助字符串显示执行应用程序所需的参数。
问题
我遇到了这个错误:
Traceback (most recent call last):
File "convortal/__init__.py", line 2, in <module>
from convortal.models import *
ImportError: No module named 'convortal'
在我的经理帮助下奋斗了一个星期后,我们终于找到了解决方案。我只是想分享它以防其他人遇到同样的问题。
项目布局
├── dbconf.yaml
├── helpers.py
├── __init__.py
└── models
├── company.py
├── country.py
├── ez_key.py
├── __init__.py
├── product_function.py
└── traveler_profile.py
convortal/__init__.py
import sys
from . models import *
from . import helpers as hp
from sqlalchemy import desc
# DECLARATIONS FOR SETUP.PY
APP_NAME = 'convortal'
__versionnum__ = ('0','0','1')
APP_VERSION = '.'.join([i for i in __versionnum__])
def convortal(site_path, country_abbr):
....(code to read file and update DB)
convortal/models/__init__.py
__all__ = [
'Company',
'Country',
'EzKey',
'ProductFunction',
'TravelerProfile',
]
from dbconn import DBconn
# create a connection to the DB
conn = DBconn('prod')
# instantiate a Base object with this connection
Base = conn.Base()
from . company import Company
from . country import Country
from . ez_key import EzKey
from . product_function import ProductFunction
from . traveler_profile import TravelerProfile
公司型号:convortal/models/company.py
from sqlalchemy import Table, Column, Integer, ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship
from .. models import Base
class Company(Base):
...company table with autoload
通过这种布局,我能够从 convortal/__init__.py 查询数据库并维护表之间的关系。
要执行请求,在这种情况下,您必须执行以下步骤:
1. 实例化会话:
session = convortal.models.conn.get_session()
- 发出请求
qtest = session.query(convortal.models.EzCompany).filter_by(some_property=value)
convortal/models/__init__.py 中的顺序很重要。因为我在模型包中的其余模块中使用 Base
,所以我必须在导入模型之前创建 Base
变量
需要重构才能不使用from . models import *
我是 Python 的新手,我一直在为退出导入而苦苦挣扎。我无法完全理解这个概念。我在 ruby 中有经验,其中导入概念完全不同。
1.情况 我有这个包裹
├── convortal
│ ├── dbconf.yaml
│ ├── helpers.py
│ ├── __init__.py
│ ├── models
│ │ ├── company.py
│ │ ├── country.py
│ │ ├── ez_key.py
│ │ ├── __init__.py
│ │ ├── __init__.pyc
│ │ ├── product_function.py
│ │ ├── __pycache__
│ │ │ ├── company.cpython-34.pyc
│ │ │ └── __init__.cpython-34.pyc
│ │ └── traveler_profile.py
│ └── __pycache__
│ └── __init__.cpython-34.pyc
├── README.md
├── requirements.txt
└── setup.py
convortal/__init___.py
import sys
from convortal.models import *
import convortal.helpers as hp
from dbconn import CtrlSession
from sqlalchemy import desc
# DECLARATIONS FOR SETUP.PY
APP_NAME = 'convortal'
__versionnum__ = ('0','0','1')
APP_VERSION = '.'.join([i for i in __versionnum__])
def convortal(argv):
....(code to read file and update DB)
convortal/models/__init__.py
__all__ = [
'Company',
'Country',
'EzKey',
'ProductFunction',
'TravelerProfile',
]
from dbconn import DBconn
from convortal.models.company import Company
from convortal.models.country import Country
from convortal.models.ez_key import EzKey
from convortal.models.product_function import ProductFunction
from convortal.models.traveler_profile import TravelerProfile
# create a connection to the DB
conn = DBconn('PROD')
# instantiate a Base object with this connection
Base = conn.Base()
公司型号:convortal/models/company.py
import convortal
from sqlalchemy import Table, Column, Integer, ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship
from models import Base
class Company(Base):
...company table with autoload
我想达到的目标
我正在尝试创建一个可以导入的包,以便将此代码与检查目录、收集用户文件并使用此包更新、创建或停用此用户的例程一起使用。
我也在尝试从命令行测试这个,像这样执行应用程序
(venv) ➜ convortal git:(master) ✗ python convortal/__init__.py
__init__.py
有 if 语句
if __name__ == '__main__':
convortal(sys.argv[1:])
运行 此命令应退出应用程序并显示一条消息,其中的帮助字符串显示执行应用程序所需的参数。
问题
我遇到了这个错误:
Traceback (most recent call last):
File "convortal/__init__.py", line 2, in <module>
from convortal.models import *
ImportError: No module named 'convortal'
在我的经理帮助下奋斗了一个星期后,我们终于找到了解决方案。我只是想分享它以防其他人遇到同样的问题。
项目布局
├── dbconf.yaml
├── helpers.py
├── __init__.py
└── models
├── company.py
├── country.py
├── ez_key.py
├── __init__.py
├── product_function.py
└── traveler_profile.py
convortal/__init__.py
import sys
from . models import *
from . import helpers as hp
from sqlalchemy import desc
# DECLARATIONS FOR SETUP.PY
APP_NAME = 'convortal'
__versionnum__ = ('0','0','1')
APP_VERSION = '.'.join([i for i in __versionnum__])
def convortal(site_path, country_abbr):
....(code to read file and update DB)
convortal/models/__init__.py
__all__ = [
'Company',
'Country',
'EzKey',
'ProductFunction',
'TravelerProfile',
]
from dbconn import DBconn
# create a connection to the DB
conn = DBconn('prod')
# instantiate a Base object with this connection
Base = conn.Base()
from . company import Company
from . country import Country
from . ez_key import EzKey
from . product_function import ProductFunction
from . traveler_profile import TravelerProfile
公司型号:convortal/models/company.py
from sqlalchemy import Table, Column, Integer, ForeignKey, UniqueConstraint
from sqlalchemy.orm import relationship
from .. models import Base
class Company(Base):
...company table with autoload
通过这种布局,我能够从 convortal/__init__.py 查询数据库并维护表之间的关系。
要执行请求,在这种情况下,您必须执行以下步骤: 1. 实例化会话:
session = convortal.models.conn.get_session()
- 发出请求
qtest = session.query(convortal.models.EzCompany).filter_by(some_property=value)
convortal/models/__init__.py 中的顺序很重要。因为我在模型包中的其余模块中使用 Base
,所以我必须在导入模型之前创建 Base
变量
需要重构才能不使用from . models import *