相关疑难解决方法(0)

Python中的相对导入3

我想从同一目录中的另一个文件导入一个函数.

有时它适用于我,from .mymodule import myfunction但有时我会得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

有时它适用from mymodule import myfunction,但有时我也得到:

SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.

有人可以向我解释这一切背后的逻辑是什么吗?

python python-import python-3.x

589
推荐指数
16
解决办法
38万
查看次数

如何将 VSCode 与 pytest 集成(“测试发现失败”)?

我无法将项目的单元测试集成到 VSCode 中。测试发现失败,因为 pytest 无法识别源文件。

(只是为了澄清,这是一个关于 VSCode 的问题,而不是关于 pytest 的问题。我在这里是因为 VSCode 将其问题部分链接到 SOF。如果我手动运行测试,测试可以正常工作。)

工装:pyenv, pipenv, pytest.

项目布局:

/src -> source code
/tests/unit -> test code
Run Code Online (Sandbox Code Playgroud)

.vscode/settings.json:

{
    "python.envFile": "${workspaceFolder}/.env",
    "python.testing.pytestEnabled": true,
    "python.testing.pytestArgs": [
        "tests"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false
    [...]
}
Run Code Online (Sandbox Code Playgroud)

.env:

PYTHONPATH=./src
Run Code Online (Sandbox Code Playgroud)

(注意:我认为 .env 在这里并不重要,根据评论,在Use of the PYTHONPATH variable下)

测试发现失败并显示:

tests/unit/test_revoke_default_sg.py:7: in <module>
    from revokedefaultsg.app import RevokeDefaultSg, UnknownEventException
E   ModuleNotFoundError: No module named 'revokedefaultsg'
=========================== short test summary info …
Run Code Online (Sandbox Code Playgroud)

pytest visual-studio-code pipenv

8
推荐指数
1
解决办法
9721
查看次数

setup.py 中的 package_dir 未按预期工作

我试图让用户在他们认为合适的任何文件夹名称下将代码编写为 python 模块(定义了 __init__.py 的文件夹)。之后我想将该模块安装为 python 包,但自己定义导入名称。

文件夹结构如下:

project_name/
    user_defined_name/
        __init__.py
        ...
    setup.py
Run Code Online (Sandbox Code Playgroud)

根据这个我应该能够加入到我的setup.py得到它的工作:

setuptools.setup(
    package_dir={'my_defined_name': 'user_defined_name'},
    packages=['user_defined_name']
)
Run Code Online (Sandbox Code Playgroud)

但我能够访问代码的唯一方法是使用import user_defined_name. 我尝试在没有 -e 的情况下安装软件包,但结果相同。离开packages=['..']设置功能也没有改变结果。

我的问题与这个问题类似,唯一的答案似乎是更改文件夹名称,这是我想避免的。该问题提到这可能是由于 setuptools 中的问题,但似乎在 3 年前就已解决。

python setuptools setup.py

5
推荐指数
2
解决办法
656
查看次数