Sự khác biệt giữa venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, v.v.?

1194
Flimm 2017-01-11 06:27.

Python 3.3 bao gồm trong thư viện tiêu chuẩn của nó gói mới venv. Nó làm gì và nó khác với tất cả các gói khác có vẻ phù hợp với regex (py)?(v|virtual|pip)?envnhư thế nào?

5 answers

1569
Flimm 2017-01-11 06:27.

Các gói PyPI không có trong thư viện chuẩn:

  • virtualenvlà một công cụ rất phổ biến tạo môi trường Python riêng biệt cho các thư viện Python. Nếu bạn không quen thuộc với công cụ này, tôi thực sự khuyên bạn nên học nó, vì nó là một công cụ rất hữu ích và tôi sẽ so sánh với nó cho phần còn lại của câu trả lời này.

    Nó hoạt động bằng cách cài đặt một loạt các tệp trong một thư mục (ví dụ env/:), và sau đó sửa đổi PATHbiến môi trường để đặt tiền tố cho nó bằng một binthư mục tùy chỉnh (ví dụ env/bin/:). Một bản sao chính xác của pythonhoặc python3nhị phân được đặt trong thư mục này, nhưng Python được lập trình để tìm kiếm các thư viện liên quan đến đường dẫn của nó trước, trong thư mục môi trường. Nó không phải là một phần của thư viện tiêu chuẩn của Python, nhưng được PyPA (Cơ quan quản lý đóng gói Python) chính thức cấp phép. Sau khi được kích hoạt, bạn có thể cài đặt các gói trong môi trường ảo bằng cách sử dụng pip.

  • pyenvđược sử dụng để cô lập các phiên bản Python. Ví dụ: bạn có thể muốn kiểm tra mã của mình dựa trên Python 2.7, 3.6, 3.7 và 3.8, vì vậy bạn sẽ cần một cách để chuyển đổi giữa chúng. Sau khi được kích hoạt, nó đặt tiền tố cho PATHbiến môi trường ~/.pyenv/shims, nơi có các tệp đặc biệt khớp với các lệnh Python ( python, pip). Đây không phải là bản sao của các lệnh do Python vận chuyển; chúng là các tập lệnh đặc biệt quyết định phiên bản Python nào sẽ chạy dựa trên PYENV_VERSIONbiến môi trường hoặc .python-versiontệp hoặc ~/.pyenv/versiontệp. pyenvcũng giúp quá trình tải xuống và cài đặt nhiều phiên bản Python dễ dàng hơn, bằng cách sử dụng lệnh pyenv install.

  • pyenv-virtualenvlà một plugin cho pyenvtác giả giống như pyenv, để cho phép bạn sử dụng pyenvvirtualenvtại cùng một thời điểm thuận tiện. Tuy nhiên, nếu bạn đang sử dụng Python 3.3 trở lên, pyenv-virtualenvhãy thử chạy python -m venvnếu nó có sẵn, thay vì chạy virtualenv. Bạn có thể sử dụng virtualenvpyenvcùng nhau mà không cần pyenv-virtualenv, nếu bạn không muốn các tính năng tiện lợi.

  • virtualenvwrapperlà một tập hợp các phần mở rộng cho virtualenv(xem tài liệu ). Nó cung cấp cho bạn các lệnh như mkvirtualenv, lssitepackagesvà đặc biệt là workonđể chuyển đổi giữa khác nhau virtualenvthư mục. Công cụ này đặc biệt hữu ích nếu bạn muốn có nhiều virtualenvthư mục.

  • pyenv-virtualenvwrapperlà một plugin pyenvcủa cùng một tác giả pyenvđể tích hợp virtualenvwrappervào một cách thuận tiện pyenv.

  • pipenvnhằm mục đích kết hợp Pipfile, pipvirtualenvvào một lệnh trên dòng lệnh. Thư mục virtualenvthường được đặt trong ~/.local/share/virtualenvs/XXX, XXXlà một mã băm của đường dẫn của thư mục dự án. Điều này khác với virtualenv, nơi thư mục thường nằm trong thư mục làm việc hiện tại. pipenvđược sử dụng khi phát triển các ứng dụng Python (trái ngược với thư viện). Có những lựa chọn thay thế pipenv, chẳng hạn như poetry, mà tôi sẽ không liệt kê ở đây vì câu hỏi này chỉ về các gói được đặt tên tương tự.

Thư viện tiêu chuẩn:

  • pyvenvlà một tập lệnh được vận chuyển với Python 3 nhưng không được chấp nhận trong Python 3.6 vì nó có vấn đề (không đề cập đến tên khó hiểu). Trong Python 3.6+, tương đương chính xác là python3 -m venv.

  • venvlà một gói được vận chuyển bằng Python 3, mà bạn có thể chạy bằng cách sử dụng python3 -m venv(mặc dù vì lý do nào đó mà một số bản phân phối tách nó ra thành một gói bản phân phối riêng, chẳng hạn như python3-venvtrên Ubuntu / Debian). Nó phục vụ cùng mục đích virtualenv, nhưng chỉ có một tập hợp con các tính năng của nó ( xem so sánh ở đây ). virtualenvtiếp tục phổ biến hơn venv, đặc biệt là vì phiên bản cũ hỗ trợ cả Python 2 và 3.

Khuyến nghị cho người mới bắt đầu:

Đây là khuyến nghị cá nhân của tôi dành cho người mới bắt đầu: bắt đầu bằng cách học virtualenvpipcác công cụ hoạt động với cả Python 2 và 3 và trong nhiều tình huống khác nhau và chọn các công cụ khác khi bạn bắt đầu cần chúng.

341
Riaz Rizvi 2017-11-30 09:00.

Tôi sẽ chỉ tránh sử dụng virtualenvsau Python3.3 + và thay vào đó sử dụng thư viện tiêu chuẩn được vận chuyển venv. Để tạo một môi trường ảo mới, bạn sẽ nhập:

$ python3 -m venv <MYVENV>  

virtualenvcố gắng sao chép tệp nhị phân Python vào thư mục bin của môi trường ảo. Tuy nhiên, nó không cập nhật các liên kết tệp thư viện được nhúng vào tệp nhị phân đó, vì vậy nếu bạn xây dựng Python từ nguồn vào một thư mục không thuộc hệ thống với tên đường dẫn tương đối, tệp nhị phân Python sẽ bị hỏng. Vì đây là cách bạn tạo một bản sao Python có thể phân phối, đó là một thiếu sót lớn. BTW để kiểm tra liên kết tệp thư viện nhúng trên OS X, sử dụng otool. Ví dụ từ trong môi trường ảo của bạn, hãy nhập:

$ otool -L bin/python
python:
    @executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

Do đó, tôi sẽ tránh virtualenvwrapperpipenv. pyvenvkhông được dùng nữa. pyenvdường như được sử dụng thường xuyên ở nơi virtualenvđược sử dụng nhưng tôi cũng sẽ tránh xa nó vì tôi nghĩ venvcũng làm những gì pyenvđược xây dựng.

venvtạo ra các môi trường ảo trong shell mới và có hộp cát , với các thư viện người dùng có thể cài đặt và nó an toàn cho nhiều python . Mới vì môi trường ảo chỉ bắt đầu với các thư viện chuẩn đi kèm với python, bạn phải cài đặt lại mọi thư viện khác pip installtrong khi môi trường ảo đang hoạt động. Hộp cát vì không có cài đặt thư viện mới nào hiển thị bên ngoài môi trường ảo, vì vậy bạn có thể xóa toàn bộ môi trường và bắt đầu lại mà không lo ảnh hưởng đến cài đặt python cơ sở của mình. Thư viện người dùng có thể cài đặt vì thư mục đích của môi trường ảo được tạo mà không có sudotrong một số thư mục bạn đã sở hữu, vì vậy bạn sẽ không cần sudoquyền để cài đặt thư viện vào đó. Cuối cùng, nó an toàn cho multi-python , vì khi môi trường ảo kích hoạt, shell chỉ nhìn thấy phiên bản python (3.4, 3.5, v.v.) được sử dụng để xây dựng môi trường ảo đó.

pyenvtương tự như venvnó cho phép bạn quản lý nhiều môi trường python. Tuy nhiên, với việc pyenvbạn không thể khôi phục cài đặt thư viện một cách thuận tiện về một số trạng thái bắt đầu và bạn có thể sẽ cần các adminđặc quyền tại một số điểm để cập nhật thư viện. Vì vậy, tôi nghĩ rằng nó cũng là tốt nhất để sử dụng venv.

Trong vài năm qua, tôi đã tìm thấy nhiều vấn đề trong hệ thống xây dựng (gói emacs, trình xây dựng ứng dụng độc lập python, trình cài đặt ...) mà cuối cùng là do các vấn đề virtualenv. Tôi nghĩ python sẽ là một nền tảng tốt hơn khi chúng tôi loại bỏ tùy chọn bổ sung này và chỉ sử dụng venv.

CHỈNH SỬA: Tweet của BDFL,

Tôi sử dụng venv (trong stdlib) và một loạt các bí danh shell để nhanh chóng chuyển đổi.

- Guido van Rossum (@gvanrossum) ngày 22 tháng 10 năm 2020
54
F1Linux 2020-01-27 12:49.

CẬP NHẬT 20200825:

Đã thêm vào bên dưới đoạn " Kết luận "

Tôi đã đi xuống pipenvlỗ thỏ ( đó thực sự là một cái hố sâu và tối ... ) và vì câu trả lời cuối cùng là hơn 2 năm trước , tôi cảm thấy rằng việc cập nhật cuộc thảo luận với những phát triển mới nhất về chủ đề phong bì ảo Python là rất hữu ích. đã được tìm thấy.

TUYÊN BỐ TỪ CHỐI:

Câu trả lời này KHÔNG phải về việc tiếp tục tranh luận gay gắt về giá trị của pipenv so với venv như các giải pháp phong bì - Tôi không xác nhận cả . Đó là về việc PyPA xác nhận các tiêu chuẩn xung đột và cách phát triển virtualenv trong tương lai hứa hẹn sẽ phủ nhận việc đưa ra một trong hai / hoặc lựa chọn giữa chúng. Tôi tập trung vào hai công cụ này chính xác bởi vì chúng là những công cụ được PyPA xức dầu .

venv

Như OP lưu ý, venv là một công cụ để ảo hóa môi trường. KHÔNG phải là giải pháp của bên thứ ba mà là công cụ gốc. PyPA xác nhận venv để tạo MÔI TRƯỜNG VIRTUAL : " Đã thay đổi trong phiên bản 3.5: Việc sử dụng venv hiện được khuyến nghị để tạo môi trường ảo ".

pipenv

pipenv - như venv - có thể được sử dụng để tạo phong bì ảo nhưng bổ sung thêmchức năngquản lý gói và kiểm tra lỗ hổng bảo mật . Thay vì sử dụngrequirements.txt,pipenvcung cấp quản lý gói thông qua Pipfile . Khi PyPA xác nhận pipenv để QUẢN LÝ GÓI , điều đó dường như ngụ ýpipfilelà thay thếrequirements.txt.

TUY NHIÊN : pipenv sử dụng virtualenv như công cụ của nó để tạo ra phong bì ảo, KHÔNG venv được xác nhận bởi PyPA như đường đi đến công cụ để tạo phong bì ảo.

Tiêu chuẩn xung đột:

Vì vậy, nếu việc giải quyết một giải pháp phong bì ảo không đủ khó, thì bây giờ PyPA xác nhận hai công cụ khác nhau sử dụng các giải pháp phong bì ảo khác nhau. Các hoành Github cuộc tranh luận trên venv vs virtualenv trong đó nổi bật mâu thuẫn này có thể được tìm thấy ở đây .

Giải quyết xung đột:

Cuộc tranh luận trên Github được tham chiếu trong liên kết trên đã thúc đẩy sự phát triển virtualenv theo hướng phù hợp với venv trong các bản phát hành trong tương lai :

thích venv tích hợp sẵn hơn: nếu python đích có venv, chúng tôi sẽ tạo môi trường bằng cách sử dụng môi trường đó (và sau đó thực hiện các hoạt động tiếp theo trên đó để tạo điều kiện cho các đảm bảo khác mà chúng tôi cung cấp)

Phần kết luận:

Vì vậy, có vẻ như sẽ có một số hội tụ trong tương lai giữa hai giải pháp phong bì ảo đối thủ, nhưng tính đến thời điểm hiện tại thì pipenv - vốn được sử dụng virtualenv- thay đổi đáng kể venv.

Với các vấn đề mà pipenv giải quyết và thực tế là PyPA đã ban phước cho nó, nó dường như có một tương lai tươi sáng. Và nếu virtualenv thực hiện các mục tiêu phát triển đề xuất của nó, việc chọn giải pháp phong bì ảo sẽ không còn là trường hợp của pipenv HOẶC venv .

Cập nhật 20200825 :

Một trong những lời chỉ trích lặp đi lặp lại đối với Pipenv mà tôi thấy khi tạo ra bản phân tích này là nó không được duy trì một cách tích cực. Thật vậy, lợi ích của việc sử dụng một giải pháp mà tương lai có thể bị nghi ngờ do thiếu sự phát triển liên tục là gì? Sau đợt khô hạn kéo dài khoảng 18 tháng, Pipenv lại một lần nữa được phát triển tích cực. Thật vậy, các bản cập nhật lớn và quan trọng đã được phát hành .

8
Arnuld 2020-05-24 18:18.

Cập nhật tháng 11 năm 2020

Chúng tôi có hai lập trường mới về môi trường ảo (cả hai đều chính thức):

Cập nhật tháng 4 năm 2020

Tôi đã tìm kiếm cùng một khi tôi xem qua bài đăng này . Tôi nghĩ vấn đề sử dụng công cụ này là khá khó hiểu và khó khăn đối với những người dùng Python mới như tôi. Đây là trực tiếp từ trang web của PyPA liên quan đến pipenv:

Mặc dù hướng dẫn này đề cập đến dự án pipenv như một công cụ tập trung chủ yếu vào nhu cầu phát triển ứng dụng Python hơn là phát triển thư viện Python, bản thân dự án hiện đang giải quyết một số vấn đề về quy trình và bảo trì ngăn các bản sửa lỗi và các tính năng mới được xuất bản ( khi toàn bộ năm 2019 trôi qua mà không có bản phát hành mới). Điều này có nghĩa là trong thời gian tới, pipenv vẫn gặp phải một số vấn đề và vấn đề về hiệu suất mà không có thời hạn rõ ràng để giải quyết các vấn đề đó.

Trong khi trường hợp này vẫn xảy ra, những người bảo trì dự án có khả năng muốn điều tra các Công cụ khác để quản lý sự phụ thuộc của ứng dụng để sử dụng thay vì hoặc cùng với pipenv.

Giả sử bản phát hành pipenv vào tháng 4 năm 2020 diễn ra theo kế hoạch và bản phát hành sau đó cũng vẫn đi đúng hướng, thì cảnh báo này trong hướng dẫn sẽ bị xóa. Nếu các bản phát hành đó không được duy trì đúng hướng, thì bản thân phần hướng dẫn sẽ bị xóa và được thay thế bằng một trang thảo luận về các tùy chọn quản lý phụ thuộc có sẵn.

3
mirek 2020-10-17 05:45.
  • pyenv - quản lý các phiên bản python khác nhau,
  • tất cả những thứ khác - tạo môi trường ảo (có phiên bản python cô lập và "yêu cầu" được cài đặt),

pipenv muốn kết hợp tất cả, ngoài việc cài đặt trước đó "yêu cầu" (vào môi trường ảo đang hoạt động hoặc tạo môi trường ảo riêng nếu không có hoạt động nào)

Vì vậy, có thể bạn sẽ hạnh phúc chỉ với pipenv.

Nhưng tôi sử dụng: pyenv + pyenv-virtualenvwrapper, + pipenv chỉ cho các yêu cầu cài đặt.

Trong Debian:

  1. apt install libffi-dev python3-virtualenv

  2. cài đặt pyenv dựa trên https://www.tecmint.com/pyenv-install-and-manage-multiple-python-versions-in-linux/ , nhưng ..

  3. ..instead của pyenv-virtualenv, hãy cài đặt pyenv-virtualenvwrapper:

    git clone https://github.com/pyenv/pyenv-virtualenvwrapper.git $ (gốc pyenv) / plugins / pyenv-virtualenvwrapper

    pyenv virtualenvwrapper

Sau đó, tạo môi trường ảo cho các dự án của bạn (workingdir phải tồn tại):

mkvirtualenv <venvname> -p python3.9 -a <workingdir>

và chuyển đổi giữa các dự án:

workon <venvname>

Bên trong một dự án, tôi có tệp tin request.txt mà không cần sửa các phiên bản bên trong (nếu một số giới hạn phiên bản không cần thiết). Bạn có 2 công cụ khả thi để cài đặt chúng vào môi trường ảo hiện tại: pip-tools hoặc pipenv . Giả sử bạn sẽ sử dụng pipenv:

pipenv install -r requirements.txt

Điều này sẽ tạo các tệp Pipfile và Pipfile.lock, các phiên bản cố định nằm trong phiên bản thứ hai. Nếu bạn muốn cài đặt lại ở đâu đó các phiên bản giống hệt nhau thì (phải có Pipfile.lock):

pipenv install

Hãy nhớ rằng Pipfile.lock có liên quan đến một số phiên bản Python và cần được tạo lại nếu bạn sử dụng một phiên bản khác.

Như bạn thấy, tôi viết tệp tests.txt. Điều này có một số vấn đề: Bạn cũng phải xóa gói đã xóa khỏi Pipfile. Vì vậy, viết Pipfile trực tiếp có lẽ tốt hơn.

Vì vậy, bạn có thể thấy tôi sử dụng pipenv rất kém. Biết đâu nếu bạn sẽ sử dụng tốt, nó có thể thay thế mọi thứ?

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Sau khi Sarah Palin tán thành Donald Trump vào đầu tuần này, gần như không thể tránh khỏi việc Tina Fey sẽ trở lại Saturday Night Live để thăm lại ấn tượng Palin cổ điển của cô. Và Fey chắc chắn đã không làm thất vọng, cô ấy đã đưa ra một lời khen ngợi không hề nhẹ về bài phát biểu chứng thực Iowa quanh co và khó hiểu của Palin trong khi Trump của Darrell Hammond đưa ra bình luận xuyên suốt.

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Brittney Griner (r.) Ngay từ đầu, thân phận của Brittney Griner đã là tình huống con tin Mỹ độc nhất trong lịch sử hiện đại.

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Chúng ta có thể thấy nhiều hơn nữa về một Julio Jones khỏe mạnh trong khu vực cuối năm nay. John Parker Wilson, Greg McElroy, A.

Đó phải là Đức

Đó phải là Đức

Đối với đội tuyển Anh, không có kẻ thủ ác nào lớn hơn Hầu hết các cổ động viên Anh, nếu không muốn nói là tất cả, hẳn sẽ phải gật gù khi tiếng còi mãn cuộc của trận bán kết lượt về W Euro 2022 vang lên. Bởi vì nó báo hiệu rằng Đức sẽ chờ đợi ở Wembley trong trận chung kết với Anh và là điều duy nhất giữa Anh và chiếc cúp lớn đầu tiên của đội tuyển nữ.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language