Skip to content

Completion on non-global python module in virtualenv #316

@nrsaty

Description

@nrsaty

I setup my emacs for specific python virtual environment, named ahone. But jediepcserver
can not complete that environment's module name.

I use emacs 26.09 and python 3.6.5 on Windows/10. My configuration is:

(setq jedi:environment-root         "~/.emacs.d/site-lisp/jedi/env")
(setq jedi:complete-on-dot t)
(setq jedi:use-shortcuts nil)
(setq jedi:server-args `("--virtual-env" "~/ahone/Lib/site-packages"
      		                     "--sys-path"    "~/ahone"))
(require 'jedi-core)
(require 'company-jedi)
(setq python-shell-interpreter      "ipython")
(setq python-shell-interpreter-args "--simple-prompt -i")
(setq python-indent-offset          2)
(setq python-indent-guess-indent-offset nil)
(add-hook 'python-mode-hook 'jedi:setup)
(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'company-backends)
                 '((company-jedi company-dabbrev-code company-yasnippet)))))

I did not activate ahone environment before starting emacs. But only specified the
environment in --virtual-env parameter of jdeiepcserver as above. It's seems that this
way is not good for specify python's virtual environment. Does anyone show me the
correct way?

By the way, I glanced at codes, and found jedi.api.Script class has sys_path parameter
in init(). Why jediepcserver did not use this? I'm not expert, and not sure that
jedi module can handle this option correctly. But according to the comment, use this
option is easy way to use with virtualenv, I feel.

In jediepcserver.py

    def jedi_script(source, line, column, source_path):
     	:
        return jedi.Script(source, line, column, source_path or '')

will be something like this

    def jedi_script(source, line, column, source_path):
     	:
        if (< Is jediepcserver has --virtual-env option? >) :
            return jedi.Script(source, line, column, source_path or ''
                               'utf-8' <current sys.path of jediepcserver>)
        else:
            return jedi.Script(source, line, column, source_path or '')

Does I misunderstand something?

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions