小编Mic*_*yre的帖子

导入使用 PyInstaller 点引用的本地模块

我有一个正在处理的 python 脚本,我正在使用 pyinstaller 打包成一个可执行文件。

在脚本中,当它未编译时,我引用了位于主脚本旁边文件夹中的一组工具,如下所示:

\parent
    ----->\tools\
       ------>db.py
       ------>file_utils.py
main.py
Run Code Online (Sandbox Code Playgroud)

我省略了 init,但它也在那里。在我的脚本中,我正在导入这些文件,例如

import tools.db
import tools.file_utils
Run Code Online (Sandbox Code Playgroud)

所有这些工作正常。当我使用 PyInstaller 将它打包为可执行文件时,我收到一个模块未找到工具错误。我已经尝试添加工具的绝对路径,将工具和相关文件添加到隐藏的导入,以及所有这些,但我有一种感觉,这是我在脚本中调用它们的方式。

我想所有这些帮助程序脚本都可以位于脚本旁边的父目录中,或者我可以将工具添加到 sys.path 并直接导入 db 和 fileutils,但这似乎有点笨拙和/或混乱。有什么明显的我失踪了吗?

python pyinstaller python-3.x

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

aiohttp 与 asyncio 和信号量返回一个填充 None 的列表

我有一个脚本可以检查数十万个提供的网站的状态代码,并且我试图将信号量集成到流程中以加快处理速度。问题是,每当我集成信号量时,我只会得到一个填充有 None 对象的列表,而且我不完全确定为什么。

我主要是从其他来源复制代码,因为我还没有完全理解异步编程,但似乎当我调试时我应该从函数中获取结果,但当我收集结果时出现了问题。我尝试过在循环、收集、确保未来等方面进行杂耍,但似乎没有什么能返回有效的事情列表。

async def fetch(session, url):
    try:
        async with session.head(url, allow_redirects=True) as resp:
            return url, resp.real_url, resp.status, resp.reason
    except Exception as e:
        return url, None, e, 'Error'


async def bound_fetch(sem, session, url):
    async with sem:
        await fetch(session, url)


async def run(urls):
    timeout = 15
    tasks = []

    sem = asyncio.Semaphore(100)
    conn = aiohttp.TCPConnector(limit=64, ssl=False)

    async with aiohttp.ClientSession(connector=conn) as session:
        for url in urls:
            task = asyncio.wait_for(bound_fetch(sem, session, url), timeout)
            tasks.append(task)

        responses = await asyncio.gather(*tasks)

    # responses = [await …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-asyncio aiohttp

3
推荐指数
1
解决办法
4220
查看次数