Công cụ kiểm tra Python tox
dường như được thiết kế để hoạt động với virtualenv. Nó cũng có thể hoạt động trên các cài đặt Python dựa trên conda/anaconda không?Có thể sử dụng độc tố với cài đặt Python dựa trên conda không?
Trả lời
Trong khi độc tố không thể sử dụng conda, bạn có thể dùng conda để "cài đặt" các phiên bản Python khác nhau, nơi độc tố có thể tìm thấy chúng (như tìm thấy cài đặt Python "bình thường" trong các thư mục đó). Sau đây được thử nghiệm trên Windows:
- Bạn cần
virtualenv
được cài đặt quapip
trong môi trường conda gốc. Tôi nghi ngờ đây là virtualenv sẽ được sử dụng bởi độc tố. (Tôi phải cài đặt virtualenv bằng cách sử dụngpip install virtualenv
để nhận lệnhvirtualenv
hoạt động, mặc dùconda list
đã hiển thị nó như được cài đặt.) - Cài đặt phiên bản Python bạn muốn kiểm tra. Điều này có thể dễ dàng thực hiện bằng cách sử dụng
conda create
.tox
sẽ tự động phát hiện mã nhị phân Python trên Windows trongC:\python27
,C:\python33
, vv, do đó tạo ra môi trường sử dụngconda create -p C:\python27 python=2.7
, vv
Tôi không biết làm thế nào phát triển nó, nhưng bạn có thể nhìn vào https://github.com/hayd/ctox.
Có, bạn cần phiên bản conda của virtualenv
được cài đặt để làm việc này.
Hãy thử:
>conda install virtualenv
virtualenv 15.1.0 py36_
Thay đổi vào thư mục dự án chứa tox.ini
>tox
nhận được lỗi này: 'TypeError: do_file() mất ít nhất 4 đối số (3 đã cho)' – avloss
tôi đã tox và conda làm việc cùng nhau trong Windows bằng cách:
Cài đặt
virtualenv
với conda trong môi trường mà tôi sử dụngtox
:conda install virtualenv
Tạo "Directory Junction" symlinks từ C: \ PythonXY đến con đường môi trường thực tế của tôi. Đây được xung quanh
InterpreterNotFound
-lỗi:mklink /J C:\PythonXY C:\real\path\to\myPythonXYenv
Tôi đã cài đặt Anaconda trong E: \ Anaconda3 \, và tất cả các môi trường của tôi trong E: \ Anaconda3 \ envs \, ví dụ E: \ Anaconda3 \ envs \ py27 \
(Xem dưới đây cho một script để làm điều này nhanh chóng và dễ dàng.)
Bước 1 - Tạo môi trường với conda:
E:\dev> conda create -n py27 python=2.7 --yes
E:\dev> conda create -n py33 python=3.3 --yes
...
E:\dev> conda create -n py36 python=3.6 --yes
Bước 2 - Tạo tất cả các liên kết tượng trưng:
E:\dev> mklink /J C:\Python27 E:\Anaconda3\envs\py27
E:\dev> mklink /J C:\Python33 E:\Anaconda3\envs\py33
...
E:\dev> mklink /J C:\Python36 E:\Anaconda3\envs\py36
Lưu ý: tôi gọi conda create
từ một thư mục trên ổ E, do đó, tùy chọn --prefix
/-p
không bắt buộc để cài đặt MÔI TRƯỜNG mới ts trong số E: \ Anaconda3 \ envs \.
Một cách dễ dàng hơn:
Thay vì trải qua quá trình cồng kềnh của thiết lập này cho mỗi phiên bản môi trường/python, người ta có thể sử dụng ToxEnvMatcher
đẳng cấp bổ sung thêm xuống theo cách này:
my_envs = os.path.join('E:\\', 'Anaconda3', 'envs')
tem = ToxEnvMatcher(my_envs)
for version in '27,34,35,36'.split(','):
tem.make(version)
Sửa: để thực hiện các kịch bản dễ dàng hơn để sử dụng, tôi đã thêm một phần mới cho file, (ở đây giả định là tox_with_conda.py,) để nó có thể được gọi từ cmd.exe:
C:\dev> python tox_with_conda.py E:\Anaconda3\envs 27 34 35 36 37
Tôi đang sử dụng Python 3.6.3 và 2.9.1 tox, nhưng tôi không biết khi nào/nếu phiên bản trước đó làm việc quá.
Quốc phòng: Tôi giả định rằng đối với một số người, điều này có vẻ như quá trình rườm rà (thực sự là không, mặc dù) hoặc phần lớn là hack. Nhưng hãy nhớ rằng việc có thể sử dụng Anaconda/conda cũng làm giảm lãng phí thời gian dành để cài đặt thư viện, gói, ++++.
Xin lưu ý:
- tôi sử dụng tox với pytest, và đã không nhận thấy bất kỳ tác động trên các bài kiểm tra của tôi.
- Bài kiểm tra của tôi rất đơn giản và có khả năng tôi chưa gặp phải sự cố.
- Chắc chắn, có những điều tôi chưa từng nghĩ đến có thể liên quan đến người khác.
Lớp (cũng có sẵn here):
from subprocess import run
from os.path import join
from sphinx.addnodes import desc
DEFAULT_BASE = join('C:\\', 'Python')
class ToxEnvMatcher:
"""
Utility to make conda environments work with tox.
Conda envs might be in other locations than where `tox <https://tox.readthedocs.io>`_ expects them to be.
A symbolic link 'Directory Junction' is created from expected location to the actual location.
Intended for Windows to get around the ``InterpreterNotFound``-error.
E.g.: tox expects to find Python 2.7 in ``C:\Python27``,
but may actually be installed in another drive and location.
Examples of use:
.. code-block:: python
my_envs = join('E:\\', 'Anaconda3', 'envs')
tem = ToxEnvMatcher(my_envs)
for version in '27,34,35,36'.split(','):
tem.make(version)
The class is utilized through ``argsparse`` so it can also be used from cmd.exe.
Examples of use of th of using ``ToxEnvMatcher`` from cmd.exe:
.. code-block:: none
E:\dev> tox_with_conda.py E:\Anaconda3\envs 27 34 35 36 37
It's possible to use the ``-b``/``--base`` option to override the default base location (``C:\Python``):
.. code-block:: none
E:\dev> tox_with_conda.py E:\Anaconda3\envs 27 34 35 36 37 --base D:\Python
:param str envs_dir: The path to where new conda environments will be created
:param str default_base: The base of the 'default' location. Usually it's ``C:\Python``
"""
def __init__(self, envs_dir, default_base=DEFAULT_BASE):
self.envs_dir = envs_dir
self.default_base = default_base
def __repr__(self):
return '{}({})'.format(self.__class__.__name__, self.envs_dir)
def make(self, version):
"""
Take version and create conda environment with symlink from 'default tox location'.
E.g.: given version='27' and environment folder ``{self.envs_dir}``:
- ``conda create -p {self.envs_dir}\py27 python=2.7``
- ``mklink /J C:\Python27 {self.envs_dir}\py27``
:param str version: A string on the form 'XY', e.g. '27' or '36'
:return: None
:rtype: NoneType
"""
if len(version) != 2 or not int(version):
raise ValueError("Parameter 'version' must be on the form 'XY', and not '{}'".format(version))
conda_cmd = self._create_cmd_args(version)
symlink_cmd = self._create_symlink_args(version)
run(conda_cmd, shell=True)
run(symlink_cmd, shell=True)
def _get_env_folder(self, version):
return join(self.envs_dir, 'py{}'.format(version))
def _create_cmd_args(self, version):
env_dir = self._get_env_folder(version)
python_version = '.'.join(version)
conda_create = 'conda create -p {} python={} --yes'.format(env_dir, python_version)
return conda_create.split(' ')
def _create_symlink_args(self, version):
env_dir = self._get_env_folder(version)
return 'mklink /J {}{} {}'.format(self.default_base, version, env_dir).split(' ')
Mã bổ sung để làm cho nó hoạt động từ cmd là:
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("env_dir",
help="The folder where conda environments should be installed.")
parser.add_argument("versions", nargs='*',
help="The list of versions, formatted 'XY' where X is major and Y minor. E.g. '27 35 36'")
parser.add_argument("-b", "--base", default=DEFAULT_BASE,
help="Base of the path which tox expects to find Python installed. "
"Default: {}.".format(DEFAULT_BASE))
args = parser.parse_args()
print('env_dir: ', args.env_dir)
print('versions: ', args.versions)
print('--base: ', args.base)
tem = ToxEnvMatcher(args.env_dir, default_base=args.base)
for version in args.versions:
tem.make(version)
- 1. Làm thế nào tôi có thể sử dụng conda để cài đặt pydotplus
- 2. kiểm tra theo độc tố không nhất thiết phải sử dụng mã được cài đặt
- 3. Cách cài đặt gói PyPi sử dụng lệnh conda anacaonda
- 4. python - Chạy độc tố + nosetests trên một Python 3.2 testenv
- 5. Conda - Cài đặt im lặng gói
- 6. Cài đặt chỉ gói sẵn sử dụng "conda cài đặt --yes --file requirements.txt" mà không có lỗi
- 7. Không thể sử dụng easy_install để cài đặt module Python
- 8. anaconda cài đặt python 3.4 trên windows
- 9. Không thể cài đặt ggplot với anaconda
- 10. Tại sao conda tạo thử cài đặt các gói lạ?
- 11. Cho phép sử dụng python hệ thống trong conda env?
- 12. Xuất môi trường conda với pip địa phương cài đặt
- 13. Chạy conda với proxy
- 14. Zsh: Lệnh cài đặt Conda/Pip không tìm thấy
- 15. Có thể sử dụng Python với php
- 16. Cài đặt tensorflow trên Windows với anaconda
- 17. Cài đặt dựa trên tệp của Node.js
- 18. Có khả thi dựa trên setlocale và dựa vào các ngôn ngữ được cài đặt không?
- 19. Tôi có thể cài đặt Gulp trên toàn cầu không?
- 20. Làm thế nào tôi có thể cài đặt Jupyter/IPython 4 một cách an toàn trong khi cài đặt conda?
- 21. Tôi phải sử dụng gói cài đặt - độc lập với ứng dụng Rails như thế nào?
- 22. Jenkins chuyển hướng/to/Jenkins trên cài đặt độc lập
- 23. không thể pip cài đặt mysql-python
- 24. conda install python = 3.6 UnsatisfiableError
- 25. Tìm tất cả các yếu tố dựa trên id sử dụng regex trên jQuery selector
- 26. Miniconda "cài đặt" gọn gàng nhưng Python không thể nhập nó
- 27. Không thể cài đặt uwsgi trên Alpine
- 28. gói Python không cài đặt trong virtualenv sử dụng pip
- 29. Cài đặt Python 2.7 không có gốc
- 30. Cài đặt Postgres trên cửa sổ để sử dụng với
Không có vẻ để làm việc trên OSX.I có virtualenv được cài đặt trong conda root, nhưng khi khởi chạy 'tox', một số cài đặt đang xảy ra nhưng sau đó mọi thứ nhận được RED và tôi nhận được các lỗi này: L ERI: virtualenv không tương thích với hệ thống này hoặc thực thi. –
** Không. ** Câu trả lời này nên _not_ đã được chấp nhận. Theo văn bản này, không có câu trả lời hay. ['ctox'] (https://github.com/hayd/ctox) là một hack khủng khiếp, trong khi' tox' là nổi tiếng [_not_ để hỗ trợ 'conda'] (https: // bitbucket.org/hpk42/tox/issues/273/hỗ trợ-conda-envs-khi-sử dụng-miniconda). 'conda' và' virtualenv' là các giải pháp cạnh tranh cho cùng một vấn đề: Cung cấp môi trường Python. Hack của bạn được đảm bảo không thành công trên các trường hợp cạnh chung. Chúng tôi sẽ chỉ phải đợi cho đến khi 'độc tố 'chính thức hỗ trợ' conda', tôi sợ. –
Cảm ơn nhận xét, @CecilCurry. Tôi đã cập nhật câu trả lời để làm rõ ý tôi là gì. Tox không thể sử dụng conda, nhưng conda có thể được sử dụng để cài đặt Python đến nơi mà độc tố có thể sử dụng nó. – cmeeren