从具有相同文件名的venv文件夹导入

2024-04-20 11:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python中的redis库和virtualenv。你知道吗

我有一个名为redis.py的文件,它具有以下导入

import redis

class RedisExtension(Extension):
    def __init__(self, config):
        print redis

class Redis(Facade):
    pass

但是,即使激活了venv文件夹,它也会执行自导入。 我需要做点什么redis.py公司从venv文件夹导入redis,该文件夹中的redis库由pip安装,而不更改此处的任何名称。你知道吗

有什么办法吗?你知道吗


Tags: 文件pyimportself文件夹redisconfigvirtualenv
1条回答
网友
1楼 · 发布于 2024-04-20 11:23:34

顺便说一句,你的要求是相当罕见的,我在这里显示的是一种黑客。最好是 您可以设法将python脚本/模块重命名为更合理的名称。你知道吗

默认情况下,Python设置从多个不同路径导入,其中一个路径是当前路径。你知道吗

>>> import os
>>> os.sys.path
['',
 '/home/javl/Envs/so/bin',
 '/home/javl/Envs/so/lib/python2.7',
 '/home/javl/Envs/so/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/javl/Envs/so/lib/python2.7/lib-tk',
 '/home/javl/Envs/so/lib/python2.7/lib-old',
 '/home/javl/Envs/so/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/javl/Envs/so/local/lib/python2.7/site-packages',
 '/home/javl/Envs/so/lib/python2.7/site-packages',
 '/home/javl/Envs/so/local/lib/python2.7/site-packages/IPython/extensions',
 '/home/javl/.ipython']

如您所见,第一项是“”。意思是“这个目录”。删除它:

>>> os.sys.path.remove("")
>>> os.sys.path
['/home/javl/Envs/so/bin',
 '/home/javl/Envs/so/lib/python2.7',
 '/home/javl/Envs/so/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/javl/Envs/so/lib/python2.7/lib-tk',
 '/home/javl/Envs/so/lib/python2.7/lib-old',
 '/home/javl/Envs/so/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/javl/Envs/so/local/lib/python2.7/site-packages',
 '/home/javl/Envs/so/lib/python2.7/site-packages',
 '/home/javl/Envs/so/local/lib/python2.7/site-packages/IPython/extensions',
 '/home/javl/.ipython']
>>> import redis

如果我们想把事情恢复到原来的顺序,我们可以这样做:

>>> os.sys.path.insert(0, "")

你应该把这个修改放到你的redis.py

os.sys.path.remove("")
import redis
os.sys.path.insert(0, "")

class RedisExtension(Extension):
    def __init__(self, config):
        print redis

class Redis(Facade):
    pass

相关问题 更多 >