小编Lac*_*ase的帖子

setuptools和pip的依赖关系解析之间的差异

我最近开始使用SetupTools打包我的第一个项目,并且大部分都取得了成功.

不幸的是,我遇到了一个令人困惑的情况 - 我的项目依赖于PyPI上没有的单文件模块.我已经能够使用dependency_links选项轻松配置setup.py以依赖于该模块,并且一切正常......只要我使用setup.py来安装它.如果我尝试使用pip来安装项目egg,那么在尝试安装模块时会失败,假设它必须是预制的egg存档.相比之下,setup.py检测到它是一个简单的源文件并从中生成一个蛋.

我的目标是让我的项目在PyPI上可用,所以使用pip安装它是很重要的.所以我的问题是......我做错了什么?

我的理解是setuptools本质上是达到目的的手段,最终是pip和PyPI,所以对我来说这两个工具应该表现得如此不同似乎很奇怪.

setup.py的相关部分和每个工具的输出如下:

setup(
    name='particle-fish',
    version='0.1.0',
    description='Python Boilerplate contains all the boilerplate you need to create a Python package.',
    long_description=readme + '\n\n' + history,
    author='Lachlan Pease',
    author_email='predatory.kangaroo@gmail.com',
    url='https://github.com/predakanga/particle-fish',
    packages=[
        'particle.plugins'
    ],
    include_package_data=True,
    install_requires=['particle', 'irccrypt', 'pycrypto'],
    dependency_links=['http://www.bjrn.se/code/irccrypt/irccrypt.py#egg=irccrypt-1.0'],
    license="BSD",
    zip_safe=False,
    keywords='particle-fish',
    classifiers=[
        'Development Status :: 2 - Pre-Alpha',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Natural Language :: English',
        "Programming Language :: Python :: 2",
        'Programming Language :: Python :: 2.6',
        'Programming Language :: …
Run Code Online (Sandbox Code Playgroud)

python pip setuptools

5
推荐指数
1
解决办法
947
查看次数

通过引用传递给STL容器的对象的生命周期

我是一名经验丰富的编码员,但我仍然是STL的新手,并且刚遇到这个问题:

据我所知,STL容器并不意味着复制它们包含的对象,或者影响它们的生命周期,但实验上我看到了不同的结果.

特别是,如果它们在超出范围之前存储在容器中,则仍然可以访问字符串类,这些类用于在销毁时将其底层存储的第一个字符清零.例如,请考虑以下示例:

using namespace std;

queue<string> strQueue;

const char *genStr(int i)
{
    ostringstream os;
    os << "The number i is " << i;
    strQueue.push(os.str());
    return strQueue.back().data();
}

void useStr()
{
    while(!strQueue.empty())
    {
        cout << strQueue.front() << endl;
        strQueue.pop();
    }
}

int main(int argc, char **argv)
{
    for(int i = 0; i < 40; i++)
    {
        printf("Retval is: %s\n", genStr(i));
    }
    useStr();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当genStr()退出时字符串超出范围,我希望printf只输出"Retval is:",或者至少调用useStr()来给出未定义的结果,因为内存被踩到了通过额外调用的重复分配,但两者都返回适当存储的字符串,而不会失败.

我想知道为什么会这样,但取而代之的是,我很高兴知道我是否可以依赖任何旧物体发生的这种效应.

谢谢

c++ stl reference

3
推荐指数
2
解决办法
1432
查看次数

标签 统计

c++ ×1

pip ×1

python ×1

reference ×1

setuptools ×1

stl ×1