命名空间包的主题似乎对于初学者来说有点混乱,并且它的先前版本的Python以几种不同的方式实现它或者StackOverflow上的许多问答都是过时的并没有帮助.我正在寻找Python 3.5或以后的解决方案.
我正在将一堆Python代码重构为模块和子模块,并且努力使这些项目中的每一个都设置为在坐在同一名称空间中时彼此独立地运行.
我们最终将使用内部PyPi服务器,将这些软件包提供给我们的内部网络,并且不希望将它们与外部(公共)PyPi软件包混淆.
示例: 我有2个模块,我希望能够执行以下操作:
from org.client.client1 import mod1
from org.common import config
Run Code Online (Sandbox Code Playgroud)
反映的模块将分开:
存储库1:
org_client_client1_mod1/
setup.py
mod1/
__init__.py
somefile.py
Run Code Online (Sandbox Code Playgroud)
存储库2:
org_common_config/
setup.py
config/
__init__.py
someotherfile.py
Run Code Online (Sandbox Code Playgroud)
我的Git仓库已经设置为org_client_client1_mod1和org_common_config,所以我只需要在包装和执行安装__init__.py文件,我相信.
随着
__init__.py,我应该使用哪些(如果有的话)?:Run Code Online (Sandbox Code Playgroud)from pkgutil import extend_path __path__ = extend_path(__path__, __name__)要么:
Run Code Online (Sandbox Code Playgroud)import pkg_resources pkg_resources.declare_namespace(__name__)
有
setup.py,我还需要添加namespace_modules参数,如果是,我会使用namespace_modules=['org.common'],还是namespace_modules=['org', 'common']?
我可以通过以某种方式实现这一点而放弃以上所有内容吗?也许是更简单或更"pythonic"的东西?
我正在重构一些旧的代码,我正在研究的项目有一个仅使用新的c ++样式转换的策略.我正在努力确保我不会错过任何方法,但目前我采用的方法非常粗糙,所以我想知道是否有任何方法可以使旧的c风格转换不能在c ++项目中编译?(或者如果不可能,至少给编译器警告)
我有一个非常基本的问题.在Android加速度计的情况下,什么是低通滤波器和高通滤波器?
当我看到加速度计传感器的输出时,我看到如果我不使用任何过滤器,(案例:我让我的手机闲置在桌子上)我得到z轴+ ve值.现在,如果我认为使用基本物理学,它会给出我的精确值(9.8approx),因为重力会导致加速度小.
要获得线性加速度,如果我向手机添加任何力,它将改变加速度计值,但它将是g + a我应用的.那么a为什么我不能直接减去我从Accelerometer得到的值?
有什么用?
我理解为低通的基本定义:允许低值,高通:允许高值.请帮我理解一下.我对此很困惑.
我可能有兴趣使用分层时间记忆模型来解决我正在研究的研究问题.
有没有任何开源库?虽然C++,Java或Haskell是首选,但我对语言非常开放.如果是的话,有没有人对他们有任何经验?
open-source artificial-intelligence nupic hierarchical-temporal-memory
我正在尝试在本地运行这个项目,但是当我尝试时,manage.py makemigrations我不断收到以下错误:
ImportError: cannot import name 'config' from 'decouple'
Run Code Online (Sandbox Code Playgroud)
这是我的步骤:
我做了一些研究,但我没有发现可能产生该错误的原因。任何人都可以帮我解决这个问题吗?提前致谢!我正在运行 Django 3。
从分布式的命名空间包中,我知道我可以利用命名空间包将一个大的Python包分成几个较小的包.真的很棒.该文件还提到:
顺便提一下,请注意,在正常的Python包布局中,项目的源树必须包含命名空间包'__init__.py文件(以及任何父包的__init__.py).这些
__init__.py文件必须包含以下行:Run Code Online (Sandbox Code Playgroud)__import__('pkg_resources').declare_namespace(__name__)此代码确保命名空间包机制正在运行,并且当前包已注册为命名空间包.
我想知道将相同的目录层次结构保存到包的层次结构有什么好处吗?或者,这只是distribute/setuptools的命名空间包功能的技术要求?
当然,
我想提供一个子包foo.bar,这样我就必须构建以下文件夹层次结构并准备__init__.py以使setup.py工作在命名空间包中:
~foo.bar/
~foo.bar/setup.py
~foo.bar/foo/__init__.py <= one-lined file dedicated to namespace packages
~foo.bar/foo/bar/__init__.py
~foo.bar/foo/bar/foobar.py
Run Code Online (Sandbox Code Playgroud)
我不熟悉命名空间包,但它在我看来1)foo/bar和2)(几乎)单行__init__.py是例行任务.它们提供了一些"这是命名空间包"的提示,但我认为我们已经在setup.py中有这些信息了?
编辑:
如下面的块所示,我可以在我的工作目录中使用没有该嵌套目录和单行__init__.py的命名空间包吗?也就是说,我们可以要求setup.py通过只放一行来自动生成它们namespace_packages = ['foo']吗?
~foo.bar/
~foo.bar/setup.py
~foo.bar/src/__init__.py <= for bar package
~foo.bar/src/foobar.py
Run Code Online (Sandbox Code Playgroud) 我正在为一个用c ++编写的游戏编写AI.AI在概念上相当简单,它只是通过决策树运行并选择适当的操作.我以前使用prolog作为决策引擎,但是由于其他开发人员使用c ++以及集成prolog代码的一些问题,我现在正尝试将其移植到c ++.
目前我在prolog(100+)中有一堆事实和规则.许多表达形式的东西,如果game_state然后做动作xyz.大多数规则都相当简单,有些规则相当复杂.我看了一个有限的状态机方法,但这似乎并没有如此好地扩展到更大的情况.我在c ++中编写这个代码的第一次尝试是一个巨大的噩梦,如果是其他案例陈述.我把这种代码随处可见:
if( this->current_game_state->some_condition == true ){
if( this->current_game_state->some_other_condition == false ){
//some code
}else{
return do_default_action();
}
}else if( this->current_game->another_condition ){
//more code
}
Run Code Online (Sandbox Code Playgroud)
复杂性很快变得难以管理.
如果有一个很好的方法来编写c ++中的这类问题?有没有好的设计模式来处理这种情况?不要求逻辑必须包含在源代码中,只需要从c ++访问即可.唯一真正的要求是它速度相当快.
我还查看了规则引擎,如果速度足够快,它们可能是合适的.你知道是否有适合的开源c ++规则引擎?
我在Jeremy Siek的BoostCon演示中看到了这个c ++ 11代码片段:
deque<int> topo_order;
topological_sort(g, front_inserter(topo_order));
for (int v : topo_order){ //line 39
cout << tasks[v] << endl;
}
Run Code Online (Sandbox Code Playgroud)
尝试在gcc中编译时出现以下错误:
main.cpp:39: error: expected initializer before ‘:’ token
Run Code Online (Sandbox Code Playgroud)
那让我想知道,哪些编译器实际上支持这种语法?
我正在尝试打印我正在制作的游戏中玩家的动作历史.在每轮结束时,每个玩家都在正方向或负方向上移动了一些数量,并将其记录为运动矢量中的int.最终我想要为每个玩家绘制移动方向与时间的关系,但是我无法从2d向量中提取数据.
所以我尝试的第一件事就是迭代并打印所有元素,但是这不能编译:
void output_movement(const std::vector< std::vector<int> > & movement){
std::vector< std::vector<int> >::iterator row;
std::vector<int>::iterator col;
for (row = movement.begin(); row != movement.end(); ++row) {
for (col = row->begin(); col != row->end(); ++col) {
std::cout << **col;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器提供此错误消息,我不太明白:
hg_competition.cpp:45: error: no match for ‘operator=’ in ‘row = ((const std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >*)money_movement)->std::vector<_Tp, _Alloc>::begin [with _Tp = std::vector<int, std::allocator<int> >, _Alloc = std::allocator<std::vector<int, std::allocator<int> > >]()’
/usr/include/c++/4.4/bits/stl_iterator.h:669: note: candidates are: __gnu_cxx::__normal_iterator<std::vector<int, std::allocator<int> >*, std::vector<std::vector<int, std::allocator<int> …Run Code Online (Sandbox Code Playgroud) 我正在编写一些代码,其中有许多简单的纯函数可以被调用很多.如果这些函数得到优化以便不经常调用,那么这是非常安全的.
目前我使用gcc作为我的编译器,我想知道是否有一种可移植的方式:
int foo(int) __attribute__ ((pure))
Run Code Online (Sandbox Code Playgroud)
有关纯关键字的信息可以在这里找到:http: //www.ohse.de/uwe/articles/gcc-attributes.html#func-pure
如果pure关键字不可用,我将如何实现类似的东西呢?
c++ ×5
python ×3
python-3.x ×2
setuptools ×2
android ×1
c++11 ×1
casting ×1
django ×1
for-loop ×1
foreach ×1
gcc ×1
hierarchical-temporal-memory ×1
nupic ×1
open-source ×1
portability ×1
pypi ×1
rule-engine ×1
stl ×1
syntax ×1
vector ×1