簡體   English   中英

與 python 導入混淆(絕對和相對)

[英]Confused with python import (absolute and relative)

我為它創建了項目和幫助模塊。 但是一些模塊正在相互使用,例如 worker 1 使用 helper1,helper2 也使用 helper1。 所以我完全混淆了我需要如何導入所有這些模塊,以便可以獨立工作(例如,我想從主腳本中調試 helper2)並且它們仍然可以正常工作。 總結 - 如何正確導入模塊,以便在 main_script 之外使用時 maint_script 和其他模塊可以正常工作。 對不起我的英語不好。

 main program dir/ main_script.py -classes/ | |--helper1.py |--helper2.py -worker_classes/ | |--worker1.py

目前我在每個腳本的請求中都使用了這種結構,但我覺得這種方法不適用於 python

import os
import sys

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'shell_modules')))

我處理項目內部導入的方式是在可編輯模式下安裝項目。 這樣,所有文件將能夠相互定位,始終從您的項目根目錄開始。

為此,請執行以下步驟:

1) 編寫一個 setup.py 文件並將其添加到您的項目根文件夾 - 它根本不需要太多信息:

# setup.py
from setuptools import setup, find_packages

setup(name='MyPackageName', version='1.0.0', packages=find_packages())

2) 以可編輯模式安裝您的軟件包(最好是從虛擬環境中)。 從項目文件夾中的終端,寫入

$ pip install -e .

請注意點 - 這意味着“以可編輯模式從當前目錄安裝包”。

3) 您的文件現在可以相互定位,始終從項目根目錄開始。 例如,要導入helper1.py ,您可以編寫:

from classes import helper1

或者:

from classes.helper1 import foo, bar

為任何文件導入helper1.py都是如此,無論它位於項目結構中的哪個位置。

就像我說的,你應該為此使用一個虛擬環境,這樣 pip 就不會將你的包安裝到你的主要 Python 安裝中(如果你的項目有很多依賴項,這可能會很混亂)。

目前我最喜歡的工具是pipenv 使用時,將終端命令替換為

$ pipenv install -e .

這樣您的項目就會被添加到 Pipfile 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM