假设您有一个项目,该项目在不同的地方都有多个级别的文件夹,为了使导入调用更清晰,人们修改了整个项目的 PYTHONPATH。
这意味着而不是说:
from folder1.folder2.folder3 import foo
Run Code Online (Sandbox Code Playgroud)
他们现在可以说
from folder3 import foo
Run Code Online (Sandbox Code Playgroud)
并将folder1/folder2 添加到PYTHONPATH。这里的问题是,如果继续这样做,并向 PYTHONPATH 添加大量路径,这是否会对性能产生明显或显着的影响?
为了在性能方面增加一些规模感,我要求至少以毫秒为单位(即:100 毫秒?500 毫秒?)
我正在尝试为我的 python 应用程序运行一些测试,但我无法正确设置路径以便我test.py可以找到它。
我的应用程序的结构如下:
repo/src/main/python/main_module
repo/tests/test.py
Run Code Online (Sandbox Code Playgroud)
我的test.py看起来像这样:
import sys
sys.path.append(os.path.normpath('C:/repo/src/main/python'))
import main_module
Run Code Online (Sandbox Code Playgroud)
现在我想在 Azure Pipelines 中测试代码,因此首先我将存储库复制到位:
- powershell: |
cd C:/
mkdir repo
cp -r -v $(src.repo)/* C:/repo/
condition: eq( variables['Agent.OS'], 'Windows_NT' )
Run Code Online (Sandbox Code Playgroud)
之后我用来tree测试所有内容是否都被正确复制。
然后我只需调用以下命令来运行测试脚本:
python C:/repo/tests/test.py
Run Code Online (Sandbox Code Playgroud)
但这给了我一个ModuleNotFoundError.
我也尝试过通过 PYTHONPATH 设置路径main_module,但这也不起作用。
这是我错过的东西还是 Azure Pipelines 中的错误?
在Python文档说,sys.path就是"从环境变量初始化PYTHONPATH,再加上安装相关的默认."
但究竟适用于Windows的"依赖于安装的默认值"是什么?
(我知道这可能取决于如何编译python,但如果我只有二进制文件,有没有办法弄清楚默认sys.path是如何构造的?)
澄清:我不是在问"我的是什么sys.path?".我想知道"Python如何构建sys.path?" 文档说,它sys.path是sys.path[0]作为脚本的当前目录构建的,加上Python在PYTHONPATH环境变量中找到的内容,以及一些依赖于安装的voodoo.那神秘的伏都教部分是什么?
我一直试图解决这个问题超过2天,筛选互联网和教程,但我还没有解决我的问题.我是一个真正的新手,还不知道我在做什么..
我使用的软件:Mac OS X 10.6 Python v3.2.2交互式解释器(IDLE)
问题:IDLE的默认目录是/ Users/ME/Documents /.具有扩展名.py的文件只能在此目录中打开.但是,我创建了一个文件夹,我想保存所有与此软件有关的.py文件等.目前,IDLE无法从我选择的目录中加载.py文件.
我首先做的是我添加到IDLE:import sys.sys.path.append('Users/Mydir /')sys.path
但是,在2010年的现有线程中,我读取sys.path仅用于解释器,如果我要更改它,我需要修改PYTHONPATH环境变量:
PYTHONPATH ="/ Me/Documents/mydir:$ PYTHONPATH"导出PYTHONPATH
但是,我很困惑如何使用它并且无法找到以下问题的答案:1)安装程序时,我的计算机上已经存在PYTHONPATH(.py?)?如果是,那它在哪里?我找不到任何地方.如果不是,我需要创建一个.但是内容应该在哪里以及应该是什么,以便IDLE可以从非默认目录加载文件?它应该只包含粗体字吗?
我希望我能清楚地解决问题.
干杯
导入模块到我的qsl/management/commands/<customcommand>.py文件有问题.事实上,我的app结构是:
qsl/management/commands/ : dir for my management commands
qsl/management/jobs/ : dir for my mangement jobs
Run Code Online (Sandbox Code Playgroud)
jobs是python类,包含我想在coresponding命令中完成的工作
例如:
news command in qsl/management/commands/ imports news job in qsl/management/jobs/
Run Code Online (Sandbox Code Playgroud)
我想要执行时的错误python manage.py news是importerror : no module named management.jobs.news
所以我一直在努力学习"学习Python的艰难之路"的最后一个练习,它指出在我运行程序之前,你必须设置Pythonpath环境变量,如下所示:
export PYTHONPATH=$PYTHONPATH:.
Run Code Online (Sandbox Code Playgroud)
我已经完成了这个,并且在它没有工作之后(我假设这就是为什么当我尝试运行我的程序时,我得到一个ImportError),我做了一些关于pythonpath的研究.它基本上说Pythonpath是要找到要导入的模块的位置.所以我将Pythonpath设置为我试图导入的模块的实际位置,但仍无济于事.
这是我的目录:
我试图运行app.py,尝试导入main.py模块:
from gothonweb import maps
Run Code Online (Sandbox Code Playgroud)
但我仍然得到这个错误:
Traceback (most recent call last):
File "python_stuff/projects/GothonWeb/bin/app.py", line 2, in <module>
from gothonweb import maps
ImportError: No module named gothonweb
Run Code Online (Sandbox Code Playgroud)
有谁知道什么?哦,其他一些细节.在Mac Os X Lion上运行Python 2.7,如果有帮助的话.
我正在尝试学习用于Python的Emacs开发,并且我发现我的一些项目由于模块导入问题而无法工作,即SciPy或NumPy未导入.我已经尝试过针对这里提出的相关问题提出的解决方案,比如更改PYTHONPATH环境变量,但没有一个是好的.在使用IDLE和终端的普通解释器时比较了sys.path我已经找到了不同的版本:IDLE中的Python-2.7.3
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "copyright", "credits" or "license()" for more information.
==== No Subprocess ====
>>> from pprint import pprint as pp
>>> import sys
>>> pp(sys.path)
['/home/mench',
'/usr/bin',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PIL',
'/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',
'/usr/lib/python2.7/dist-packages/ubuntuone-couch',
'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
Run Code Online (Sandbox Code Playgroud)
和Python-2.7.2作为默认系统解释器
Python 2.7.2 (default, Mar 1 2012, 22:28:45)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pprint …Run Code Online (Sandbox Code Playgroud) 我无法以我想要的方式导入我的模块进行测试.我在2.7.2的virtualenv中运行所有这些
我有一个类似的目录结构
/api
/api
__init__.py
my_module.py
/tests
my_module_test.py
Run Code Online (Sandbox Code Playgroud)
我将PYTHONPATH设置为/ Path/api /.我将CD转入/ Path/api并运行以下命令
py.test tests/my_module_test.py
Run Code Online (Sandbox Code Playgroud)
它在以下情况下不起作用:
from api.my_module import my_function它在以下情况下有效:
from my_module import my_function为什么我无法像案例1那样导入我的模块?
我想在我的Python脚本文件夹中包含一个第三方库,以将其全部分发(我不知道发行许可证,可以很好地分发该库)。这是为了避免将库安装在另一台机器上。
说我有一个脚本(my_script.py),它将调用此外部库。我试图将此库从Python目录的site-packages子目录复制到我有文件的目录中,但这似乎还不够(我认为原因是__init__.py该库的中,可能需要将文件夹放在其中的PYTHONPATH)。
为了使所有内容正常工作my_script.py,sys.path在其中插入一些代码行以将其文件夹临时附加到其中是否合理?
例如,如果我有一个类似于以下的结构:
Main_folder
my_script.py
/external_lib_folder
__init__.py
external_lib.py
Run Code Online (Sandbox Code Playgroud)
并且external_lib_folder是我从site-packages复制的外部库并将其插入到我的库中Main_folder,如果我将这些行(例如)写在中会很好my_script.py吗?
import os,sys
main_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(main_dir)
Run Code Online (Sandbox Code Playgroud)
编辑
我最终选择了sys.path.append解决方案。我将这些行添加到我的my_script.py:
import os, sys
# temporarily appends the folder containing this file into sys.path
main_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),'functions')
sys.path.append(main_dir)
Run Code Online (Sandbox Code Playgroud)
无论如何,由于他花了很多时间帮助我(当然,因为他的解决方案也行得通),所以我选择将其作为问题的编辑内容并接受Torxed的答案。
我有一台Windows 7机器,安装了32位anaconda,供本地用户使用。安装工作按预期进行:它允许我从命令行运行python和pip,切换环境等。
我还有一个我在“我的文档”中编写的代码库。我想补充像一个条目C:\Users\username\Documents\MyLib我PYTHONPATH。通常这不是问题,但是我没有这台(工作发行的)计算机通过Windows UI修改环境变量所需的提升特权。
我正在寻找一种设置PYTHONPATH的方法。我只需要它在anaconda环境中工作(即,我只想能够使用该特定的解释器导入我的库)。sys.path.append在我的脚本中使用的解决方案是不可接受的。但是,我sys.path.append可以执行一些脚本,该脚本将在每次运行时自动执行python myscript.py。
我怀疑有一种方法可以解决通过Windows UI施加的特权限制,因为运行conda info -a显示Anaconda安装程序能够将项目插入PATH,特别是C:\Users\username\AppData\Local\Continuum\Anaconda3\Library\bin;...。
python ×10
pythonpath ×10
python-2.7 ×3
path ×2
windows ×2
anaconda ×1
azure-devops ×1
django ×1
emacs ×1
importerror ×1
macos ×1
pytest ×1
python-idle ×1