无论如何,有什么强迫PyCharm始终使用绝对导入?

Sar*_*oma 0 python pycharm

我使用的是PyCharm,通常依靠alt + enter快捷方式来自动导入类和函数。

但是,它不使用绝对导入路径。它在本地运行良好,但是当我推送到GitHub时,我的测试在TravisCI中失败了。

有谁知道强制PyCharm以绝对路径导入的方法?

drone_squadron.api.drone_api如果我使用像这样api.drone_api的东西,则远程测试无法找到导入,则需要像这样导入。这适用于所有本地进口。

我希望所有时间始终都是绝对进口。相对进口使我在打包项目时遇到了问题。我认为始终使用绝对导入会更容易。

Git回购

https://github.com/sarcoma/drone_squadron_api_prototype

树状结构

.
??? coverage.xml
??? LICENSE.md
??? pytest.ini
??? README.md
??? requirements.txt
??? drone_squadron
?   ??? app.py
?   ??? endpoints.http
?   ??? flask.cfg
?   ??? __init__.py
?   ??? load_fixtures.py
?   ??? main.py
?   ??? router.py
?   ??? schema.py
?   ??? test_flask.cfg
?   ??? api
?   ?   ??? base_api.py
?   ?   ??? drone_api.py
?   ?   ??? gimbal_api.py
?   ?   ??? __init__.py
?   ?   ??? price_api.py
?   ?   ??? round_type_api.py
?   ?   ??? scanner_api.py
?   ?   ??? squadron_api.py
?   ?   ??? steering_api.py
?   ?   ??? thruster_api.py
?   ?   ??? user_api.py
?   ?   ??? weapon_api.py
?   ??? authentication
?   ?   ??? __init__.py
?   ?   ??? login.py
?   ??? crud
?   ?   ??? base_crud.py
?   ?   ??? drone_crud.py
?   ?   ??? gimbal_crud.py
?   ?   ??? __init__.py
?   ?   ??? item_crud.py
?   ?   ??? price_crud.py
?   ?   ??? round_type_crud.py
?   ?   ??? scanner_crud.py
?   ?   ??? squadron_crud.py
?   ?   ??? status_crud.py
?   ?   ??? steering_crud.py
?   ?   ??? thruster_crud.py
?   ?   ??? user_crud.py
?   ?   ??? weapon_crud.py
?   ??? database
?   ?   ??? database.py
?   ?   ??? drones.db
?   ?   ??? drones_test.db
?   ?   ??? __init__.py
?   ??? enums
?   ?   ??? __init__.py
?   ?   ??? round_type.py
?   ?   ??? status.py
?   ??? error
?   ?   ??? error.py
?   ?   ??? __init__.py
?   ??? fixtures
?   ?   ??? gimbal_fixtures.py
?   ?   ??? __init__.py
?   ?   ??? round_type_fixtures.py
?   ?   ??? scanner_fixtures.py
?   ?   ??? status_fixtures.py
?   ?   ??? steering_fixtures.py
?   ?   ??? thruster_fixtures.py
?   ?   ??? user_fixtures.py
?   ?   ??? weapon_fixtures.py
?   ??? model
?   ?   ??? base_model.py
?   ?   ??? drone_model.py
?   ?   ??? __init__.py
?   ?   ??? squadron_model.py
?   ??? request
?   ?   ??? __init__.py
?   ?   ??? json_request_handler.py
?   ??? response
?   ?   ??? __init__.py
?   ?   ??? json_response.py
?   ??? service
?   ?   ??? calculate_cost.py
?   ??? transformer
?   ?   ??? __init__.py
?   ?   ??? json_transformer.py
?   ?   ??? transformer.py
?   ??? validation
?       ??? abstract
?       ?   ??? __init__.py
?       ?   ??? validation_abstract.py
?       ??? drone_validation.py
?       ??? field.py
?       ??? __init__.py
?       ??? validation_link.py
?       ??? validations.py
??? tests
    ??? drones_test.db
    ??? __init__.py
    ??? test_api
    ?   ??? conftest.py
    ?   ??? __init__.py
    ?   ??? test_auth.py
    ?   ??? test_drone.py
    ?   ??? test_gimbal.py
    ?   ??? test_price_list.py
    ?   ??? test_round_type.py
    ?   ??? test_scanner.py
    ?   ??? test_squadron.py
    ?   ??? test_steering.py
    ?   ??? test_thruster.py
    ?   ??? test_weapon.py
    ??? test_crud
        ??? conftest.py
        ??? __init__.py
        ??? test_drone_crud.py
        ??? test_gimbal_crud.py
        ??? test_scanner_crud.py
        ??? test_squadron_crud.py
        ??? test_status_crud.py
        ??? test_steering_crud.py
        ??? test_thruster_crud.py
        ??? test_user_crud.py
        ??? test_weapon_crud.py
Run Code Online (Sandbox Code Playgroud)

Ant*_*ane 5

在Python中,导入可以是相对的也可以是绝对的。

从项目的根目录解析绝对导入:

import drone_squadron.api.drone_api
Run Code Online (Sandbox Code Playgroud)

相对导入是从当前python包中解析的。

import ..api.drone
Run Code Online (Sandbox Code Playgroud)

在您的情况下,问题不是相对/绝对混淆,PyCharm始终添加绝对导入。

问题在于,PyCharm可能会将drone_squadron您项目中的文件夹视为“根目录”。错了!根目录是与整个git项目相对应的顶级文件夹(包含LICENSE.md,README.md等的文件夹)

在PyCharm中,右键单击该文件夹drone_squadron,然后打开子菜单Mark directory as(在底部),然后选择Unmark as Source Root

PyCharm动画截图:更改根目录

完成该操作后,将以您想要的方式添加您的导入。