同一專案下不同的包匯入相同的第三方包的衝突問題

2021-10-05 09:14:15 字數 2056 閱讀 3061

baseic_servers/config中倒入vyper

ent_monitor/config倒入vyper

問題:從兩個不同的專案檔案下倒入相同的包,後續呼叫包內屬性的時候會出現衝突/覆蓋的問題

此段為rabbitmq的client端**,在另乙個檔案中導用emailmqclient的時候,會出現一下情況:

import json

import pika

from basic_development.config import c

class

emailmqclient

:# 匯入的c作為類屬性使用時,呼叫的是basic_development.config中的c

# routing_key = c.get('basic_service.email.client.routing_key')

# hostname = c.get('basic_service.email.client.hostname')

# exchange = c.get('basic_service.email.client.exchange')

# parameters = pika.connectionparameters(host=hostname)

def__init__

(self)

:# 匯入c作為例項屬性使用時,呼叫的室ent_monitor.config中的c

self.routing_key = c.get(

'basic_service.email.client.routing_key'

) self.hostname = c.get(

'basic_service.email.client.hostname'

) self.exchange = c.get(

'basic_service.email.client.exchange'

) self.parameters = pika.connectionparameters(host=self.hostname)

defsend

(self, body:

dict):

''' :param body:

:return:

'''# import ipdb;ipdb.sset_trace()

connection = pika.blockingconnection(self.parameters)

channel = connection.channel(

) channel.queue_declare(queue=self.routing_key)

channel.basic_publish(exchange=self.exchange, routing_key=self.routing_key, body=json.dumps(body)

) connection.close(

)

出現以上情況的原因是:

類屬性在宣告類的同時就被呼叫,此時ent-monitor/config還未被呼叫,所以類屬性中的c是basic_development/config中的c;

例項屬性在類例項化的時候才被呼叫,此時ent-monitor/config已經被呼叫,在email.py模組中呼叫from basic_development.config import c的時候,因為命名c,來自from vyper import v as c,都導的同乙個vyper包,所以後呼叫c的ent-monitor.configbasic_development/config中的c覆蓋。

總結:

Python第三方包的匯入

我們知道,定義在環境變數pythonpath裡是可以直接用import匯入的。下面我們來操作如何從非pythonpath目錄匯入第三方包或者自己定義的包。假定我們的包有如下的目錄結構 person 是最頂層的包,man woman child是子包 person init py person.py ...

Python第三方包cx Oracle的配置

cx oracle是乙個在python中連線oracle資料庫並取資料的包 不清楚是否為唯一的包 配置方法 1,關於oracle資料庫 首先我是安裝了正常的完整能用的oracle的,但是還是建議下乙個instant client,在oracle的官網應該有。2,關於安裝cx oracle windo...

python配置自己的第三方包

對於要發布的 需要準備的檔案如下 放在根目錄下 setup.py是核心配置檔案,格式為 from distutils.core import setup setup name module name version 1.0 py modules module name req.txt是自己的程式需要...