在 python 中导入模型之类的文件?
Import a file like a model in python?
一个对象已经被pickle序列化,将被放置在任何地方(任何目录下)的模型使用。由于该对象经常使用并且是模型的一部分,我想让模型包含 pickle 文件(将文件放在模型的目录下)作为变量。
./data/constant.py
object = pickle.load(open('object.pkl'))
./data/object.pkl
./code/model01.py
from ..data import constant
# or
# from __future import absolute_import
# from model.data import constant
object = constant.object
./code/model02.py
from ..data import constant
object = constant.object
问题显然是 python 将在 ./code/
下搜索 object.pkl
(以及我在模型外部使用模型功能的任何地方)而不是 ./data/
.
我做的对吗?有更好的解决方案吗?谢谢。
我认为这个问题可能会重复(这是一个非常常见的问题),但我在这里找不到任何相关的档案。如果是这样,请帮助我重定向到那里。
您似乎希望 object
成为模块 constant
的一部分。
一种方法是将腌制对象放入 constant.py
:
my_object = pickle.loads(pickled_object) # don't use the name `object` it is a built-in
注意 loads
中的 s
。
pickled_object
需要放在 constant.py
内,在上面显示的行之前。它必须是一个字节串。
您可以直接从对象创建它:
pickled_object = pickle.dumps(obj)
或者从 pickled 文件中取出并粘贴进去。
例子
腌制你的对象:
>>> import pickle
>>> obj = [1, 2, 3]
>>> pickle.dumps(obj)
b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
现在,在 constant.py
:
pickled_object = b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
my_object = pickle.loads(pickled_object)
因此,my_object
是 [1, 2, 3]
,可以通过 constant.my_object
访问
进行一些路径操作应该可行:
在模块 constant.py
中:
import os
path = os.path.dirname(os.path.abspath(__file__))
obj = pickle.load(open(os.path.join(path, 'object.pkl')))
一个对象已经被pickle序列化,将被放置在任何地方(任何目录下)的模型使用。由于该对象经常使用并且是模型的一部分,我想让模型包含 pickle 文件(将文件放在模型的目录下)作为变量。
./data/constant.py
object = pickle.load(open('object.pkl'))
./data/object.pkl
./code/model01.py
from ..data import constant
# or
# from __future import absolute_import
# from model.data import constant
object = constant.object
./code/model02.py
from ..data import constant
object = constant.object
问题显然是 python 将在 ./code/
下搜索 object.pkl
(以及我在模型外部使用模型功能的任何地方)而不是 ./data/
.
我做的对吗?有更好的解决方案吗?谢谢。 我认为这个问题可能会重复(这是一个非常常见的问题),但我在这里找不到任何相关的档案。如果是这样,请帮助我重定向到那里。
您似乎希望 object
成为模块 constant
的一部分。
一种方法是将腌制对象放入 constant.py
:
my_object = pickle.loads(pickled_object) # don't use the name `object` it is a built-in
注意 loads
中的 s
。
pickled_object
需要放在 constant.py
内,在上面显示的行之前。它必须是一个字节串。
您可以直接从对象创建它:
pickled_object = pickle.dumps(obj)
或者从 pickled 文件中取出并粘贴进去。
例子
腌制你的对象:
>>> import pickle
>>> obj = [1, 2, 3]
>>> pickle.dumps(obj)
b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
现在,在 constant.py
:
pickled_object = b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
my_object = pickle.loads(pickled_object)
因此,my_object
是 [1, 2, 3]
,可以通过 constant.my_object
进行一些路径操作应该可行:
在模块 constant.py
中:
import os
path = os.path.dirname(os.path.abspath(__file__))
obj = pickle.load(open(os.path.join(path, 'object.pkl')))