标签: pythonpath

PyCharm如何以及为何改变Python的导入逻辑?

我在Windows上有一个PyCharm 1.2.1.我必须编辑同一个项目的不同分支 - 有点重的分支,因为它们存在于磁盘上的不同文件夹中 - 说它是c:\apps\alphac:\apps\beta.对于每个这样的文件夹,应调整PYTHONPATH变量以指向位于项目根文件夹(c:\alpha\vendor,...)内某处的相应供应商库.我设法通过从cmd批处理文件启动PyCharm解决了这个问题,该文件在启动PyCharm之前设置了必要的PYTHONPATH变量值(所以我有PyCharm.cmd内部alphaPyCharm.cmd内部beta目录).

问题:当我打开PyCharm进行编辑beta文件夹时,import语句alpha文件夹导入模块!当我python.exe从命令行启动解释器时,一切都按预期工作 - 问题似乎只有PyCharm.

第二个奇怪的调查:print sys.path从PyCharm和外部python.exe解释器执行代码给出不同的结果 - 从PyCharm它不显示我的PYTHONPATH模块.我是Python和PyCharm的新手,但这种行为看起来很奇怪且不一致.

最后我发现PyCharm IDE中的一些设置似乎应该允许我解决这个问题 - File -> Settings -> Python Interpreter.在那里,我找到了两个alphabeta文件夹的所有路径.无法清除此路径列表,仅禁用某些元素.但即使是禁用也有点愚蠢 - 我应该在每次编辑alphabeta"解决方案文件夹" 时单独禁用/重新启用它们.

最后一个问题:PyCharm如何编辑单独的项目(文件夹)并强制PyCharm不从错误的位置导入模块?

python import pythonpath pycharm

12
推荐指数
1
解决办法
9625
查看次数

如何在 Python 项目中正确构建内部脚本?

考虑以下 Python 项目框架:

proj/
??? foo
?   ??? __init__.py
??? README.md
??? scripts
    ??? run.py
Run Code Online (Sandbox Code Playgroud)

在这种情况下foo保存主项目文件,例如

# foo/__init__.py
class Foo():
    def run(self):
        print('Running...')
Run Code Online (Sandbox Code Playgroud)

scripts保存需要从 导入文件的辅助脚本,foo然后通过以下方式调用:

[~/proj]$ python scripts/run.py
Run Code Online (Sandbox Code Playgroud)

有两种导入方式Foo都失败了:

  1. 如果尝试进行相对导入,from ..foo import Foo则错误为ValueError: attempted relative import beyond top-level package
  2. 如果尝试绝对导入,from foo import Foo则错误为ModuleNotFoundError: No module named 'foo'

我目前的解决方法是将运行路径附加到sys.path

import sys
sys.path.append('.')

from foo import Foo
Foo().run()
Run Code Online (Sandbox Code Playgroud)

但这感觉就像一个黑客,必须添加到scripts/.

有没有更好的方法来构建此类项目中的脚本?

python pythonpath python-3.x

12
推荐指数
3
解决办法
1548
查看次数

使用virtualenv和mod_wsgi的Apache:ImportError:没有名为'django'的模块

我正在尝试使用以下Apache配置为django项目提供服务:

Apache虚拟主机配置:

<VirtualHost *>
    ServerName servername

    [...]

    <Directory "/path/to/project/project">
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages                           
    WSGIScriptAlias / /path/to/project/project/wsgi.py

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我也有以下wsgi.py:

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

我没有问题来提供STATIC文件和MEDIA文件.

我还检查了权限并尝试递归使用755,然后777到我的virtualenv的site-package目录.它没用.

但是当我试图访问我的网站的根目录时,我得到以下内容:

from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django'
Run Code Online (Sandbox Code Playgroud)

我猜这是一个Python路径相关的问题,因为django安装在我的virtualenv中.但我添加了相关的python路径WSGIDaemonProcesspython-path属性,所以我不明白为什么它不起作用.

我也猜测我可以通过使用site模块将相关目录添加到我的wsgi.py中的Python路径中,但我想了解为什么我尝试的Apache配置还不够.我错过了什么?

apache django mod-wsgi pythonpath

11
推荐指数
3
解决办法
2万
查看次数

永久删除python路径中的目录

我最近在我的python路径中添加了一些我不希望使用的东西:

export PYTHONPATH=$PYTHONPATH:/my/path
Run Code Online (Sandbox Code Playgroud)

您可以使用sys.path.remove删除路径中的某些内容,但它不是100%永久性的,就像我使用上面的命令行语句添加它一样.

如何从python路径中永久删除目录?

python macos command-line pythonpath

10
推荐指数
3
解决办法
2万
查看次数

什么是.pydistutils.cfg?

我在两台服务器上工作,在一台服务器上.pydistutils.cfg看起来像:

install_scripts=~/opt_old/bin
install_data=~/opt_old/share
install_lib=~/usr/lib/python2.6/site-packages
Run Code Online (Sandbox Code Playgroud)

我认为,这会在本地版本的python上使用pip和链接库时出现问题.

在第二台服务器上,该文件不存在,我没有任何问题.

为什么我们需要这个文件,为什么PYTHONPATH不够用?

我安装了本地版本的Python并重命名了.pydistutils.cfg文件.因此,似乎该文件并不重要.

python pip pythonpath

10
推荐指数
1
解决办法
6906
查看次数

导入父目录以进行简短测试

我从上到下搜索过这个网站,但还没有找到一种方法来实际完成我想要的Python3x.这是一个简单的玩具应用程序,所以我想我可以在断言中编写一些简单的测试用例并将其称为一天.它确实会生成报告等,所以我想确保我的代码在更改时不会做任何事情.

我目前的目录结构是:(仅包括相关部分)

project
  -model
     __init__.py
     my_file.py
     -test
       my_file_test.py
Run Code Online (Sandbox Code Playgroud)

我有一段时间让my_file_test.py导入my_file.py.

就像我说的那样.我从上到下搜索过这个网站,没有解决方案.我的Python版本是在Fedora 17上运行的3.2.3.

以前尝试过的尝试: https: //stackoverflow.com/questions/5078590/dynamic-imports-relative-imports-in-python-3从父文件夹导入模块 任何人都可以解释python的相对导入吗? 如何在python中完成相对导入

几乎在每次尝试中我都会收到错误:

ImportError:没有名为*OR ValueError的模块:在非包中尝试相对导入

这里发生了什么.我已经尝试了SO以及整个互联网上的所有接受的答案.没有做任何想象的事情,但作为一个.NET/Java/Ruby程序员,这被证明是直观性的绝对定义.

编辑:如果重要,我尝试加载我试图在REPL中导入的类,我得到以下内容:

>>> import datafileclass
>>> datafileclass.methods
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
>>> x = datafileclass('sample_data/sample_input.csv')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)

如果它很重要......我知道类中的功能可以工作,但是我无法导入它在现在导致无法测试.将来肯定会引发整合问题.(名称已更改,以保护无辜者)在几周内获得库的此迭代所需的功能...任何帮助都可能有用.本来可以在Ruby中完成它,但客户希望Python作为一种学习体验,

fedora pythonpath project-layout python-3.x

9
推荐指数
1
解决办法
5547
查看次数

WSGIPythonPath不起作用

我正在使用mod_wsgi在Apache2上部署我的web.py应用程序.

这是我的virt_host文件,

WSGIPythonPath /home/ubuntu/plotwatt/libplotwatt:/home/ubuntu/plotwatt/pwstage/src

<VirtualHost *:20108>
ServerAdmin gslabrails.dev.plotwatt.com

DocumentRoot /var/www
WSGIScriptAlias / /var/www/currentcost/server.py
WSGIDaemonProcess currentcost user=ubuntu group=ubuntu processes=5 threads=3
WSGIProcessGroup currentcost
WSGIApplicationGroup %{GLOBAL}
AddType text/html .py

<Directory /var/www/currentcost/>
    Order deny,allow
    Allow from all
</Directory>

ErrorLog /var/log/apache2/currentcost_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/currentcost_access.log combined

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我在WSGIPythonPath中给了我名为redisStage的lib的路径.但是,它似乎不适合我.我做错了配置吗?我不能把WSGIPythonPath指令放在VitualHost指令中.究竟是什么原因?

python mod-wsgi apache2 pythonpath

9
推荐指数
1
解决办法
9744
查看次数

Virtualenv,no-site-packages,sys.path

我的基本问题是我无法--no-site-packages"工作".

我已经阅读了SO上的一些帖子,包括这篇文章.我是一个巨大的Ubuntu noob,并且在python如何与os交互时并没有更好.

其他帖子建议printenv显示PYTHONPATH当我在我的virtualenv时,printenv似乎没有列出"PYTHONPATH",但很有可能我应该寻找的是一个dir我不知道的特殊而不是大写字母.

然而,我注意到,当我在virtualenv中运行python shell时,列出了我的所有全局包.

我不知道这是一个问题virtualenv,.bashrc,Ubuntumy brain.任何帮助将不胜感激.

如果那里有某种知识渊博的灵魂愿意在一个来回的过程中帮助我,我会非常感激.我没有列出我的任何输出,因为,老实说,除了上述之外,我不完全确定从哪里开始.

编辑以回应评论; UTC时间:2015年11月19日07:41

启动环境:

notanambiturner@computer:~/Dropbox/$$ P/...$ virtualenv --no-site-packages venv
New python executable in venv/bin/python
Installing setuptools, pip, wheel...done.
Run Code Online (Sandbox Code Playgroud)

进入环境:

notanambiturner@computer:~/Dropbox/$$ P/...$ source venv/bin/activate
(venv)notanambiturner@computer:~/Dropbox/$$ P/...$
Run Code Online (Sandbox Code Playgroud)

系统包:

(venv)notanambiturner@computer:~/Dropbox/$$ P/...$ pip freeze
adium-theme-ubuntu==0.3.4
apt-xapian-index==0.46
beautifulsoup4==4.4.1
bleach==1.4.2
blinker==1.3
cffi==1.1.2
characteristic==14.3.0
chardet==2.3.0
colorama==0.3.3
command-not-found==0.3
....
virtualenv==13.1.2
virtualenv-clone==0.2.6
virtualenvwrapper==4.7.1
wheel==0.26.0
whitenoise==1.0.6
xdiagnose==3.8.1
zope.interface==4.1.2
(venv)notanambiturner@computer:~/Dropbox/$$ P/...$ 
Run Code Online (Sandbox Code Playgroud)

sys.path:

(venv)notanambiturner@computer:~/Dropbox/$$ P/...$ …
Run Code Online (Sandbox Code Playgroud)

python ubuntu virtualenv sys pythonpath

9
推荐指数
1
解决办法
971
查看次数

在 Visual Studio Code 中设置文件“launch.json”的 Python 路径

我使用 Visual Studio Code 已有几年了,我发现它是一个非常好的 IDE。我用 Python 编程的次数比任何其他语言都多。

令我困扰的是我没有抽出时间使用 IDE 的调试器(尽管它是一个功能)。

按调试播放按钮时出错:

Failed to launch the Python Process, please validate the path 'export PATH=$PATH:/Library/Frameworks/Python.framework/Versions/2.7/bin/python'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

检查我的 PYTHONPATH:

在此输入图像描述

我的launch.json文件:

"configurations": [
    {
        "name": "Python",
        "type": "python",
        "request": "launch",
        "stopOnEntry": true,
        "pythonPath": "${config:python.pythonPath}",
        "program": "${file}",
        "cwd": "/workspace/h5-automation/",
        "env": {},
        "envFile": "${workspaceRoot}/.env",
        "debugOptions": [
            "WaitOnAbnormalExit",
            "WaitOnNormalExit",
            "RedirectOutput"
        ]
    }
Run Code Online (Sandbox Code Playgroud)

有什么想法/建议吗?

python configuration pythonpath visual-studio-code

9
推荐指数
1
解决办法
1万
查看次数

在 VS Code 中为本地 Jupyter Notebook 设置 PYTHONPATH

我在 Windows 10 上使用 Visual Studio 1.39.2。我很高兴你可以在今年 10 月(2019 年)通过 VS Code 本地运行 Jupyter Notebook,但我不明白的一件事是如何设置我PYTHONPATH在启动本地 Jupyter 服务器之前。

我想要的是能够导入位于另一个文件夹中的某个模块(因为该模块是从 C++ 代码编译的)。当我运行一个普通的 Python 调试会话时,我发现我可以通过设置来设置集成终端的环境变量terminal.integrated.env.linux。因此,我PYTHNPATH在正常调试时设置了这个选项。但是在运行 Jupyter Notebook 时,本地 Jupyter 服务器似乎并没有在集成终端中运行(至少从我看到的情况来看不是这样),因此它没有PYTHONPATH设置。

我的问题是,如何PYTHONPATH在 VS Code 中自动设置本地 Jupyter Notebook 服务器?

python pythonpath visual-studio-code jupyter-notebook

9
推荐指数
2
解决办法
3026
查看次数