将SQLAlchemy导入我的项目

3 投票
1 回答
1299 浏览
提问于 2025-04-18 13:55

环境:

  • Python 2.7.5
  • SQLAlchemy 0.9.6

我做了什么:

我想把SQLAlchemy的源代码放到我的项目里,原因有很多。主要是为了以后我的用户不需要使用虚拟环境。

我的项目结构大概是这样的:

$ tree . -L 2
myapp
├── libs
│   ├── ...
│   └── sqlalchemy
├── myapp
│   └── ...
└── MyApp.py

我把libs的路径添加到了系统路径里。

### MyApp.py
# ...
BASE_DIR = os.path.dirname(__file__)
LIBRARY_DIR = os.path.join(BASE_DIR, 'libs')
sys.path.append(LIBRARY_DIR)
# ...

现在我尝试从libs.sqlalchemy.orm导入内容。

from libs.sqlalchemy.orm import relationship

结果我遇到了一个错误。

Traceback (most recent call last):
  File "/.../myapp/MyApp.py", line 13, in <module>
    from libs.sqlalchemy.orm import relationship
  File "/.../myapp/libs/sqlalchemy/orm/__init__.py", line 69, in <module>
    from . import strategies as _strategies
  File "/.../myapp/libs/sqlalchemy/orm/strategies.py", line 301, in <module>
    @properties.RelationshipProperty.strategy_for(lazy="noload")
AttributeError: 'module' object has no attribute 'RelationshipProperty'

这个错误的追踪信息指向了这里。

### ./libs/sqlalchemy/orm/strategies.py
@log.class_logger
@properties.RelationshipProperty.strategy_for(lazy="noload") # <- here
@properties.RelationshipProperty.strategy_for(lazy=None)
class NoLoader(AbstractRelationshipLoader):
    # ...

实际问题:

我错过了什么或者做错了什么呢?
我从这里下载了tar.gz文件,并把lib/sqlalchemy文件夹复制到了我的lib路径里。

1 个回答

3

仅仅解压tar文件是无法使用alchemy的,因为它里面有一些需要编译的本地库,所以你需要这样做:

sudo pip install alchemy or
untar your tar.gz and run "python setup.py install"

这就是“pip install”在做的事情:

Installing collected packages: sqlalchemy
  Running setup.py install for sqlalchemy
    building 'sqlalchemy.cprocessors' extension
    /usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -arch i386 -g -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c lib/sqlalchemy/cextension/processors.c -o build/temp.macosx-10.3-fat-2.7/lib/sqlalchemy/cextension/processors.o
    /usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -g build/temp.macosx-10.3-fat-2.7/lib/sqlalchemy/cextension/processors.o -o build/lib.macosx-10.3-fat-2.7/sqlalchemy/cprocessors.so
    building 'sqlalchemy.cresultproxy' extension
    /usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -arch i386 -g -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c lib/sqlalchemy/cextension/resultproxy.c -o build/temp.macosx-10.3-fat-2.7/lib/sqlalchemy/cextension/resultproxy.o
    /usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -g build/temp.macosx-10.3-fat-2.7/lib/sqlalchemy/cextension/resultproxy.o -o build/lib.macosx-10.3-fat-2.7/sqlalchemy/cresultproxy.so
    building 'sqlalchemy.cutils' extension
    /usr/bin/clang -fno-strict-aliasing -fno-common -dynamic -arch i386 -g -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c lib/sqlalchemy/cextension/utils.c -o build/temp.macosx-10.3-fat-2.7/lib/sqlalchemy/cextension/utils.o
    /usr/bin/clang -bundle -undefined dynamic_lookup -arch i386 -g build/temp.macosx-10.3-fat-2.7/lib/sqlalchemy/cextension/utils.o -o build/lib.macosx-10.3-fat-2.7/sqlalchemy/cutils.so

撰写回答